– Cześć, Amigo, to znowu ja, Baśka. Przepraszam, że w kółko to powtarzam, ale taki jest zwyczaj na Ziemi w XXXI wieku. Chcę przekazać Ci więcej informacji na temat zmiennych referencyjnych i przekazywania zmiennych referencyjnych do funkcji (metod).
– Jestem gotowy.
– Świetnie, zatem słuchaj. Zmienne referencyjne to wszystkie zmienne, które nie są zmiennymi prostymi. Takie zmienne przechowują tylko referencję obiektu (odwołanie do obiektu).
– Zmienne proste przechowują wartości, podczas gdy zmienne referencyjne przechowują referencje do obiektów lub null. Mam rację?
– Dokładnie.
– Co to jest referencja?
– Relacja pomiędzy obiektem i referencją obiektu jest jak relacja pomiędzy osobą i jej numerem telefonu. Numer telefonu nie jest osobą, ale można użyć go, aby zadzwonić do danej osoby, poprosić o informacje, kontrolować ją lub wydawać jej polecenia. Referencja służy właśnie do pracy z obiektami. Wszystkie obiekty oddziałują na inne za pomocą referencji.
– Jakby rozmawiały ze sobą przez telefon?
– Dokładnie. Gdy wykonujemy przypisanie zmiennej prostej, wartość jest kopiowana. Jeżeli przypisujemy referencję, kopiowany jest adres obiektu (numer telefonu). Sam obiekt nie jest kopiowany.
– OK, mam to.
– Referencja daje jeszcze jedną korzyść: możesz przekazać referencję obiektu do dowolnej metody i będzie ona mogła użyć tej referencji, aby zmodyfikować (zmienić) obiekt poprzez wywołanie jego metod i dostęp do danych wewnątrz obiektu.
Przykład 1
Tutaj wartości m i n nie zmieniają się.
|
A oto, dlaczego tak jest.
Ten kod jest analogiczny do kodu po lewej stronie.
|
– Do zmiennych a i b przypisywane są tylko wartości, odpowiednio 5 (m) i 6 (n); a i b nie wiedzą nic o zmiennych m i n (i nie wpływają na nie w żaden sposób).
– Prawdę mówiąc, teraz rozumiem, że nic nie rozumiem. Czy możesz podać mi jeszcze kilka przykładów?
– Używając referencji obiektu, moglibyśmy zrobić tak:
Przykład 2
W tym kodzie dane obiektów zmieniają się.
|
A oto, dlaczego tak jest.
Ten kod jest analogiczny do kodu po lewej stronie.
|
– Referencje do jola i ela są przypisywane odpowiednio do zmiennych a i b; a i b zmieniają wartości w obiektach jola i ela.
– I można deklarować klasy wewnątrz innych klas, tak? Super!
– Ale nadal nie do końca rozumiem całą resztę.
– Wszystko w swoim czasie.
GO TO FULL VERSION