//code-1
Emp1 emp11 = new Emp2();
((Emp2) emp11).displayEmp2();
//code-2
Emp1 emp11 = new Emp2();
emp11 = (Emp2) emp11; //line-1
(emp11).displayEmp2(); //line-2
class Emp1 {
public void displayEmp1(){
System.out.println("displayEmp1");
}
}
class Emp2 extends Emp1 {
public void displayEmp2(){
System.out.println("displayEmp2");
}
}
Warum Code-1 unterscheidet sich von Code-2. Code-1 wird erfolgreich ausgeführt, aber Code-2 gibt einen Kompilierungsfehler bei Zeile-2. Obwohl, das gleiche in beiden Stück Code zu tun. Ich verstehe, dass es nicht in der Lage sein wird, die Methode in der Superklasse während der Kompilierungszeit zu finden. Aber mein Zweifel ist, wenn es bereits explizit bei Zeile-1 konvertiert, warum es Kompilierungsfehler wirft. Wenn es so ist, dann sollte es auch Fehler für Code-1 auch werfen.Polymorphismus und explizites Gießen des Objekts
https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html – emotionlessbananas
anrufen wollen zuerst lesen – emotionlessbananas
'Emp1 emp11 'bedeutet' emp11' ist eine Referenz auf 'Emp1'. Keine Menge an Casting wird das ändern. –