Wenn ein Subklasse Objekt zu ihrer Oberklasse gegossen wird, zum BeispielBestimmung der Methode überschreibt aufgerufen tatsächlich
Superclass obj = new Subclass();
und die Klassen
public class Superclass{
public void thisMethod(){
System.out.println("Superclass version was executed");
}
und
public class Subclass extends Superclass{
public void thisMethod(){
System.out.println("Subclass version was called");
}
public void newMethod(){
System.out.println("blah");
}
}
definiert wurden, wenn obj.thisMethod()
wurde aufgerufen, ich bekomme Subclass version was called
als Ausgang, was natürlich die ve bedeutet Diese Methode, die in der Unterklasse definiert wurde (die Version, die ein originelles Superklassenobjekt nicht ausführen kann) wurde aufgerufen, obwohl der deklarierte Typ Superklasse ist, ja? Also, wenn auch die Unterklasse Methode auf Obj, ausgeführt wurde, wenn obj.newMethod()
aufgerufen wird, bekomme ich einen Kompilierfehler.
Warum wird die in der Unterklasse definierte Version von thisMethod()
über das Superklassenobjekt obj
aufgerufen? Ich verstehe, dass der eigentliche Typ von obj
immer noch Unterklasse ist, also natürlich sollte die neue Version aufgerufen werden, aber dann, sollte ich nicht obj.newMethod()
anrufen können?
Dankhaufen für irgendwelche Erklärungen (:
edit: * im Titel