Komentarze (7)
@kanarex Witam tego całkiem śnieżnego dnia! Mam nadzieję, że będzie on lepszy niż poprzedni! (✿❦ ͜ʖ ❦)
każda książka o OOP dobrze to tłumaczy jak i studia więc opis dość głupi, ale piorun na zachętę
Nie jest prawdą że typ prosty możemy poznać po tym, że jest pisany mała literą.
Koduje po polsku, ale heap i stack nie przetłumaczył ;).
Nie powiedział o bardzo istotnej różnicy przy przekazywaniu typów prostych i referencyjnych do metod.
Solidne 3+ XD
@kbk właśnie szukam jakiegoś poradnika który mi to wytłumaczy, dokładnie to zagadnienie, ni cholery nie mogę zrozumieć
@kanarex
Tak na szybko. Zmienna/pole np.
int box1;
String box2;
MyOwnClass box3
to pudełko. Dla typów prostych w pudełku trzyma się jedną, konkretną wartość np. true, 4, 4.5. Dla typów obiektowych w pudełku jest referencja/"adres" obiektu.
W przypadku typów prostych:
2.1 public void fun(int i){
2.2 i++;
2.3 System.out.println(i)
}<br />
-
int j = 0;
-
fun(j);
-
System.out.println(j);
-
Wkładamy do pudełka j wartość 0;
-
Wywołujemy funkcję fun i przekazujemy (kopiujemy) do niej zawartość pudełka j, czyli 0;
2.1 W funkcji ta wartość z pudełka j jest wkładana do pudełka i;
2.2. Zawartość pudełka i zwiększamy o 1, zawartość pudełka j w tym czasie się nie zmienia.
2.3. Wypisujemy 1
- Wypisujemy zawartość pudełka j, czyli cały czas 0;
W przypadku typów obiektowych:
2.1 public void fun(MyOwnClass i){
//<br />
}<br />
-
MyOwnClass moc = new MyOwnClass();
-
fun(moc);
-
Tworzymy obiekt typu MyOwnClass i wkładamy jego referencję/"adres" do pudełka moc.
-
Wywołujemy funkcję fun i przekazujemy (kopiujemy) do niej zawartość pudełka moc czyli referencję/"adres" wcześniej utworzonego obiektu. Sam obiekt nie jest kopiowany, nadal jest tylko jeden.
2.1 W funkcji ta referencja/"adres" z pudełka moc jest kopiowana do pudełka i
Na tym etapie mamy jeden obiekt typu MyOwnClass i dwie zmienne które "wskazują" na ten obiekt. Wywołanie metody i.someMethod() czy moc.someMethod() odnoszą się do tego samego obiektu. Tak samo odwołanie się do pola w klasie i.field1 czy moc.field2 też dotyczy tego samego pola.
Dałem z siebie całe 30%
@kbk uwaga daję z siebie 100%.
Czyli i.someMethod() i moc.someMethod() mogą modyfikować oryginalną wartość z obiektu MyOwnClass i tenże obiekt będzie miał wartość z ostatniej wykonanej przez program metody?
@kanarex Metoda someMethod może robić dowolną rzecz. Jeśli w tym przypadku modyfikowałaby któreś z pól w klasie MyOwnClass to zarówno pierwsze jak i drugie wywołanie zmieniałoby to samo pole w tym samym obiekcie klasy MyOwnClass (bo obie referencje wskazują/prowadzą do tego samego obiektu). I tak, ostatnie wywołanie metody określa jaki stan będzie miał obiekt klasy MyOwnClass na koniec programu.
Zaloguj się aby komentować