Ich bin Java studiert, und ich wurde den folgenden Code angegeben:Java-Unterklassen: Was ist die Methode, die ausgelöst wird?
public class A {
public void m(A a) { System.out.println("A.m:A"); }
public void m(B b) { System.out.println("A.m:B"); }
}
public class B extends A {
private void m(C c) { System.out.println("B.m:C"); }
public void m(B b) { System.out.println("B.m:B"); }
}
public class C extends A {
public static void main(String args[]) {
A ab = new B();
B bb = new B();
A ac = new C();
ab.m(ac); // My answer: A.m : A || correct
ab.m(ab); // My answer: B.m : B || Correct answer: A.m : A
ab.m(bb); // My answer: B.m : B || correct
bb.m(ac); // My answer: compile error || Correct answer: A.m : A
bb.m(ab); // My answer: B.m : B || Correct answer: A.m : A
bb.m(bb); // My answer: B.m : B || correct
ac.m((A)bb); // My answer: A.m : A || correct
bb.m((B)ac); // My answer: compile error || Correct answer: run-time error [Class cast exception] --> I UNDERSTAND THIS
bb.m((B)ab); // My answer: B.m : B || correct
}
}
ich schreiben musste, was das Ergebnis der Anrufe in Hauptfunktion sein würde. Wie Sie sehen können, habe ich die meisten Antworten falsch verstanden. Was ich versuche zu verstehen, ist, wie kann ich feststellen, welche Klasse Funktion aufgerufen wird, wenn ich eine Variable der Art der Superklasse, die mit dem Konstruktor einer Unterklasse erstellt wurde?
Mögliches Duplikat von [Java dynamische Bindung und Methode überschreiben] (http://stackoverflow.com/questions/321864/java-dynamic-binding-and-method-overriding) – Seelenvirtuose