Ciekawostka - static w abstract calss |
Ciekawostka - static w abstract calss |
28.01.2017, 19:07:02
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) |
Ostatnio spotkałem się z ciekawym "bugiem" który podobno nim nie jest. Ciekawy jestem jakie jest Wasze zdanie na ten temat.
Mam kod:
Jakie Twoim zdaniem wartości powinno mieć a i b? (fajnie jakbyś nie wykonywał tego kodu przed odpowiedzią) Następnie do powyższego kodu dodamy 3 nowe klasy:
Jakie wartości będzie mieć c i d? Jak wiadomo static użyte w klasie powinno kierować do "ostatniej" w hierarchii klasy. Jednak static w klasach abstrakcyjnych wydaje się być jakimś innym tworem - być może dlatego, że self w takich klasach nie może istnieć. Jeżeli zrobimy jednak zabieg z klasy F w getInstance static znowu jest tym "normalnym" static. Przez normalnym mam na myśli zachowanie które uważam za prawidłowe - obiekt klasy abstrakcyjnej nie może istnieć dlaczego więc static klasy abstrakcyjniej może? Tym sposobem możemy też sprawić aby static nie był static w zwykłych klasach:
Ten post edytował markuz 28.01.2017, 19:44:49 -------------------- |
|
|
6.02.2017, 14:38:31
Post
#2
|
|
Grupa: Zarejestrowani Postów: 532 Pomógł: 24 Dołączył: 15.04.2011 Skąd: Kalisz Ostrzeżenie: (0%) |
Static odnosi się do klasy jako kontenera, a nie do obiektu tej klasy. Klasa abstrakcyjna daje możliwość utworzenia "tak jakby" interfejsu, już z predefiniowanymi metodami, które klasa dziedzicząca wspóldzieli. Odwołania statyczne do klasy mają się nijak do tworzenia obiektów. Dlatego static::$zmienna działa dla klasy abstrakcyjnej. A to, do której ona klasy należy, to już zależy od dziedziczenia. Powinno się używać static od klasy w której jest to zdefiniowane.
|
|
|
Wersja Lo-Fi | Aktualny czas: 24.04.2024 - 11:46 |