Komentarze (7)

dev

@kanarex Witam tego całkiem śnieżnego dnia! Mam nadzieję, że będzie on lepszy niż poprzedni! (✿❦ ͜ʖ ❦)

Mickey

każda książka o OOP dobrze to tłumaczy jak i studia więc opis dość głupi, ale piorun na zachętę

kbk

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

kanarex

@kbk właśnie szukam jakiegoś poradnika który mi to wytłumaczy, dokładnie to zagadnienie, ni cholery nie mogę zrozumieć

kbk

@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 />

  1. int j = 0;

  2. fun(j);

  3. System.out.println(j);


  1. Wkładamy do pudełka j wartość 0;

  2. 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

  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 />

  1. MyOwnClass moc = new MyOwnClass();

  2. fun(moc);


  1. Tworzymy obiekt typu MyOwnClass i wkładamy jego referencję/"adres" do pudełka moc.

  2. 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%

kanarex

@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?

kbk

@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ć