Angesichts der folgenden Java-Code:Verständnis Java Vererbung
class mainul {
public static void main(String[] args) {
/*block 1*/
B b1 = new B();
A a1 = b1;
a1.m1(b1);
/*block 2*/
B b2 = new B();
B a2 = b2;
b2.m1(a2);
}
}
class A {
public static void p(Object o) {
System.out.println(o.toString());
}
public void m1(A a) {
p("m1(A) in A");
}
}
class B extends A {
public void m1(B b) {
p("m1(B) in B");
}
}
jemand etwas Licht auf, warum die Ausgabe dieses Programms vergießen ist
m1(A) in A
m1(B) in B
Man würde erwarten, dass der Ausgang von Block 1 zu sein " m1 (B) in B "aufgrund der Tatsache, dass der dynamische Typ von a1 B ist. Ich habe bemerkt, dass die Funktionssignaturen in A und B für m1 nicht übereinstimmen (man erwartet ein Objekt vom Typ A und das andere von B als Argument) und die Methode in A scheint Priorität zu bekommen, kann sie aber nicht wirklich mit meiner Ausgabe verknüpfen, da sie nicht mit dieser übereinstimmt Der Ausgang von Block2.
Vielen Dank für Ihre Zeit
in der Tat, lassen Sie es eine A-Instanz erwarten, und es wird funktionieren. – MarioDS