A obiekt = new B();
Nie zadziała jeśli obiekty te : nie sa w pewien sposób ze sobą powiązane, na zasadzie POLIMORFIZMU i lub dziedziczenia
Jak to jest w praktyce?
załóżmy że A jest rodzicem ( Jest to tatuś i ma pewne cechy w tym jest bardzo upierdliwy )
mamy potomka B- jest dzieckiem rodzica A ( czyli dziedziczy wszystkie cechy po A, jest też upierdliwy- ale ma swoją własną cechce - jest inteligentny :D )
Załóżmy, że mamy obiekt dziecka B jednak chcemy wywoływać na nim metody ( funckjonalności np pobranie tylko tego że jest upierdliwy, a nie tego że jest inteligentny ),
W tym wypadku jeśli przypiszemy.
A obiekt = new B();
// w tym wypadku obiekt
Tutaj co prawda przypisujemy obiekt B który jest inteligentny i upierdliwy do obiektu A, co powoduje że odwołując sie do funkcjonalności obiektu możemy korzystać tylko z tego co "Zawiera sobie klasa A", czyli nie dowiemy sie czy jest inteligetny ale wiemy że bedzie upierdliwy
obiekt.jestUpierdliwy(); // zadziała
obiekt.jestInteligentny() // wywolanie tego nie zadziala, jesli metoda ta jest w klasie B.
Więc tutaj WARTOŚĆ ( REFERENCJA DO OBIEKTU ZWRACANEGO ) tego co zwracasz decyduje o funkcjonalności dla tego obiektu.
WIĘCEJ O PRZYPISYWANIU OBIEKTU DO RÓŻNYCH OBIEKTÓW TO PO PROSTU PODSTAWA OOP CZYLI POLIMORFIZM
http://naukajavy.pl/kurs-jezyka-java/93-polimorfizm -- tutaj odsyłam
http://www.altcontroldelete.pl/artykuly/programowanie-obiektowe-polimorfizm/ - i tutaj
Generalnie Polimorfizm i dziedziczenie idzie ze sobą w parze i te dwa aspekty musisz się nauczyć