– Cześć, Amigo! Teraz opowiem Ci, jak tworzone są obiekty.
– Co w tym takiego skomplikowanego, wujku Raszi? Piszesz new i nazwę klasy, wskazujesz właściwy konstruktor i gotowe!
– To prawda. Ale co się dzieje wewnątrz obiektu, kiedy to robisz?
– Co się tam dzieje?
– Już wyjaśniam: obiekt jest tworzony w kilku etapach.
1) Wpierw do wszystkich zmiennych składowych klasy przydzielana jest pamięć.
2) Następnie inicjalizowana jest klasa bazowa.
3) Później wszystkim zmiennym przypisywane są wartości (o ile zostały one określone).
4) W końcu wywoływany jest konstruktor.
– To nie wygląda na trudne: najpierw zmienne, potem konstruktor.
– Zobaczmy, jak to działa na przykładzie z dwiema klasami:
Kod | Opis |
---|---|
|
Zadeklarowano dwie klasy: Pet(pet) i Cat(cat).
W klasie Cat widzimy jawne odwołanie do konstruktora klasy bazowej. A oto, co dzieje się po przydzieleniu pamięci: Następnie rozpocznie się inicjalizacja klasy Cat. |
|
– Nie do końca rozumiem. Dlaczego to takie skomplikowane?
– Tak naprawdę nic w tym trudnego, jeśli wiesz, co się tam naprawdę dzieje:
Jeśli dana klasa nie posiada żadnych konstruktorów, zostanie on utworzony automatycznie.
Konstruktor domyślny | |
---|---|
|
|
Jeśli nie wywołasz konstruktora klasy bazowej, zostanie on wywołany automatycznie.
Wywołanie konstruktora klasy bazowej | |
---|---|
|
|
|
|
Zmienne składowe są inicjalizowane w konstruktorze.
Inicjalizacja zmiennych składowych | |
---|---|
|
|
Co się dzieje naprawdę | |
---|---|
|
|
– Teraz jest to o wiele bardziej zrozumiałe: najpierw klasa bazowa, potem zmienne poza konstruktorem, a następnie kod konstruktora.
– Dobra robota, Amigo! To wszystko!