Przepraszam, ale mam wrażenie, że wątki "żyją" do góra jednej doby i dwóch odpowiedzi na pytanie przewodnie. Jeszcze potem kilka komentarzy i wątek ginie w natłoku innych, nowych. Dlatego kontynuuję wątek:
http://forum.pasja-informatyki.pl/164293/referencje-do-obiektow-zmienialnych
Ostatnia wypowiedź jednego z kolegów poniżej i moje kolejne wątpliwości w kolejnym poście.
---
Masz rację, rozszerzanie klasy Collar przez Dog nie ma sensu. Ogólnie dziedziczenie nie jest zawsze dobrym rozwiązaniem. Większość książek na początku porusza ten temat żeby przedstawić ogólnie na czym to programowanie obiektowe polega, ale tak na prawdę czasem właśnie chodzi o to żeby uniknąć dziedziczenia. Jeden z rozdziałów książki Effective Java, która jest uznawana za prawdopodobnie najważniejszą książkę dla programistów Javy mówi:
"Favour composition over inheritance" (Preferuj kompozycję ponad dziedziczenie).
Gdzie owa kompozycja to właśnie "zjawisko" gdzie jedna klasa jako pole ma obiekt innej klasy. Kiedyś na pewno poznasz to głębiej i będziesz wiedzieć kiedy jedna klasa powinna dziedziczyć po innej, a kiedy od tego uciekać. (Jakbyś chciał o tym poczytać to warto zacząć od tego czym jest: "Liskov substitution principle", ale wydaje mi się, że na początku nauki języka nie musisz zagłębiać się tak szybko w takie rzeczy.)
Ja javy uczyłem się na początku samu zaczynając przygodę od "Head First - Java". Później pracowałem ze znajomymi w kole naukowym na studiach, co też było (i jest) bardzo fajnym doświadczeniem - więc jeśli znasz kogoś kto też się uczy programować to wspólna praca nad projektem jest super.
Co do indywidualnych projektów - im wcześniej, tym lepiej. Taki just-in-time learning jest bardzo pozytywny. Pisz na co masz ochotę, może być to jakaś prosta gra albo jakaś aplikacja mająca na celu zarządzanie planem dnia / przypominanie Ci o nowych odcinkach serialu / cokolwiek co Ci przyjdzie do głowy :)
Interfejsy można powiedzieć, że głównie służą do definicji typów, też taki polimorfizm tylko "luźniejszy" i bardziej preferowany. Moim zdaniem takie rzeczy najlepiej poznaje się z czasem, wraz z pisaniem kolejnych projektów. Trudno osiągnąć takie pełne zrozumienie z książki :)