In dynamische Methode Bindung eine Superklassenreferenz kann nur eine Unterklasse Methode aufrufen, die geerbt und von ihr überschrieben wird. Das andere kann jedoch implementiert werden.Ist es möglich, dass ein Superklassenobjekt eine Unterklassen-Member-Methode referenziert, die nicht vererbt wird?
abstract class in
{
abstract void print();
}
class a extends in
{
String name=this.getClass().getSimpleName();
void show()
{
System.out.println("class "+name);
}
void print()
{
show();
}
}
class Main
{
public static void main(String args[])
{
in x;
x = new a();
x.print();
}
}
Hier druckt erfolgreich
Klasse ein
Auch getClass() die Unterklasse Namen der übergeordneten Klasse Objekt dieses bezieht sich anstelle von Super Namen als kehrt in Hauptmethode.
Eltern können nicht über Kinder wissen. Ein Entwickler einer Klasse kann nicht wissen, wie seine Klasse von Benutzern erweitert wird. – duffymo
Alle 'in' wissen, dass es eine Methode namens' print() 'haben soll. Die gesamte Implementierung dieser Methode findet innerhalb von 'a' statt, die alles über 'a' weiß (was den Klassennamen und andere Methoden betrifft). – khelwood
Also meinst du x.print() ist äquivalent zu neuem a() .print()? Aber ist nicht x eine Superklassenreferenz? – ZEU5