überschriebene Methode der Oberklasse verwenden

NightmareVirus

Mitglied
Hallo,
ich bin gerade auf eine mir nicht ganz verständliche Verhaltensweise von Java gestoßen bei der ich um Erklärung bitte.
Es gibt zwei Klassen OK und UK und eine Testmethode die Objekte erstellt und anschließend eine Methode meth2 aufruft, welche sowohl in OK als auch in UK exisitert.
Quellcode:
Java:
public class OK{

  public void meth2(){

     System.out.println("meth2 von OK");

  }

}

Java:
public class uk1 extends OK{

  public void meth2(){

     System.out.println("meth2 von UK1");

  }
 
}

Java:
public class MinimalTest{

  public static void main(String[] args){

  OK o = new OK();
  uk1 u1 = new uk1();
 
  u1.meth2();

  ((OK)u1).meth2();
  }
}


Wieso wird in den letzten beiden Zeilen der Testklasse 2x diesselbe Methode (meth2() von uk1) aufgerufen und nicht zunächst meth2() von uk1 und dann meth2 der Oberklasse?
 
Ich kann es dir nicht mehr super-genau erklären, aber dieser Beitrag dürfte dir beim Verständnis sehr helfen:
http://feu.mpaap.de/cms/1618FAQ-Aufloesung

Auf dein Problem bezogen dürfte vor allem diese Textpassage zutreffen:
Da in Java eine Methode nur dann eine gleichnamige Methode eines Supertyps überschreibt, wenn die Deklarationstypen der Parameter beider Methoden exakt übereinstimmen (Invarianz), sucht die VM beginnend im tatsächlichen Typ des Aufrufempfängers nach einer Methode, deren Parametertypen genau denen des im Bytecode stehenden Methodenaufrufs entsprechen. Findet sie diese Methode dort nicht, schaut sie in der Superklasse nach, ggf. in deren Superklasse und so weiter. Dass sich die Methode finden muss, ist klar, sonst hätte der Compiler den entsprechenden Methodenaufruf ja gar nicht erst zugelassen.
 

Neue Themen


Zurück
Oben