somekind napisał(a)
Jest utworzona zmienna określonego typu. Ale ona na nic nie wskazuje, nie "kryje się" pod nią żaden obiekt.
somekind napisał(a)
Tworzysz zmienną klasy bazowej Zwierzę, więc możesz przypisać do niej obiekt klasy Zwierzę i wszystkich pochodnych.
1.
Czyli pisząc:
Zwierze pies;
Tworzę zmienna o nazwie "pies" (klasy) typu "Zwierze".
Póki co jest "puste", a zaczyna ona być referencją podczas tworzenia obiektu, czyli przykładowo:
Zwierze pies = new Zwierze();
Tak ?
2.
Jeżeli tak to w takim przypadku z czego wynika reguła, że ze zmiennych tego typu (np. "pies") można tworzyć obiekty dla klas pochodnych, ale nie można już dla innych. Po prostu taka zasada czy z czegoś to wynika ? (Już piszę o co mi chodzi... ;))
class Zwierze {}
class Ssaki : Zwierze{}
class Gady : Zwierze{}
class Ptaki : Zwierze{}
class Czlowiek {}
i np. mogę zrobić tak:
Zwierze pies;
pies = new Ssaki();
ale nie mogę zrobić tak:
pies = new Czlowiek();
Niby oczywiste (bo pies wywodzi się z klasy Zwierze), ale dlaczego tak jest ?!
Czy mogę napisać w urojonym pseudo kodzie w mojej głowie coś takiego, że: typy klasy bazowej i z niej wyprowadzonych są tym samym typem ? Czyli że: Zwierze = Ssaki = Gady = Ptaki, jako typ zmiennej ?
3.
Powracając do:
Zwierze pies;
pies = new Ssaki();
Czy zapis powyższy różni się czymś od poniższego:
Ssaki pies = new Ssaki();
Czy się różni ?! Czy ma to jakieś znaczenie, od której klasy tworzyłem zmienną jeżeli potem przypisuję do niej referencję poprzez tworzenie obiektu jej samej lub klasy z niej pochodnej ?
Ponumerowałem abyśmy mogli się lepiej komunikować :P Jeżeli mogę prosić to prosiłbym o odpowiedzi wg. tych numerków, dziękuje.
Deti napisał(a)
Następnie dla referencji o nazwie pies podporządkowujemy nowo tworzony obiekt klasy dziedziczonej o nazwie Pies i teraz wskazujemy na nowy obiekt, ale co się stało ze starym obiektem ? Został usunięty ? Co z nim się stało ? Jak do niego się odwołać ?
Polecam mój artykuł: Garbage Collector
Dziękuje za linka, zapoznam się z tematem.