Kurs JavaStart - blad w lekcji o Polimorfizmie?

0

Czesc, czytalem lekcje o polimorfizmie z kursu JavaStart i wg mnie tam jest blad (w zalaczniku zaznaczony tekst jest bledny czy tylko tak mi sie wydaje)? Przeciez "Przypisując obiekt B do referencji typu A mamy dostęp tylko to metod, które znajdują się w typie referencji, w tym przypadku interfejsu A." Jakim cudem mamy dostęp "tylko to metod, które znajdują się w typie referencji, w tym przypadku interfejsu A." jezeli po wczesniejszym przypisaniu obiektu B do referencji typu A mam normalnie dostep...? Prosze o rozjasnienie, wytlumaczenie, dzieki.

0

Czy chodzi o to, ze przypisujac dany obiekt do danej referencji wtedy sie tworzy integralna calosc czy jak?

0

W Javie metody wywoływane są zgodnie z rzeczywistym typem obiektu na rzecz którego są wołane, a NIE zgodnie z typem deklarowanym.

class B extends A {...}
A a = new B();

Klasa A jest typem referencji, a klasa B jest typem faktycznym. Załóżmy, że chcemy wywołać jakąś metodę np.:

a.doSomething(); // wywołanie polimorficzne metody doSomething()

Jest ona zaimplementowana w klasie A oraz przesłonięta w klasie B. Wówczas JVM sprawdza tą metodę pod kątem faktycznego typu obiektu - sprawdza czy występuje ona w klasie B. Jeśli tak, wywołuje ją. "Zjawisko" to jest nazywane polimorfizmem. Jeśli nie (nie została zaimplementowana w klasie B), wywołuje ją z klasy A - w tym przypadku "nie zachodzi" polimorfizm.

Odpowiadając na pytanie też mi się wydaje, że tam jest błąd.

1

Jeśli dobrze rozumiem to chyba chodzi o to że jak mamy interface A i klase B która implentuje A jak przypiszemy A a = new B(); to bez rzutowania w dół możemy wykonać tylko metody z interface A :)

Tak jak masz właśnie

      List<Object> list = new LinkedList<>();

to możesz z referencji list wywołać tylko metody które są w interfejscie a nie możesz bez rzutowania wykonać tych dodatkowych :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1