public class A {
public void m1(A a) {
System.out.println("m1(A) in A");
}
public void m4() {
System.out.println("m4() in A");
}
}
public class B extends A{
public void m1(B b) {
System.out.println("m1(B) in B");
}
public void m4() {
System.out.println("m4() in B");
}
}
public class Test {
public static void main(String[] args) {
B b = new B();
A a = b;
a.m1(b); // returns m1(A) in A
a.m4(); // returns m4() in B
}
}
有人能解釋爲什麼a.m1(b)
使用A的方法,而a.m4()
使用B的方法嗎?在java中動態綁定方法 - 爲什麼這個方法?
我特別不明白這個變量(a
)是如何調用兩個不同類的方法的。我認爲,在運行時,a
要麼視爲A或B,然後應導致從A兩種方法或B.
哇。非常感謝你的努力!我的錯誤是假定m1(B b)是一個覆蓋,因爲每個B也是一個A.但現在它實際上是有道理的,事實並非如此。很好的答案! – Daniel
我很高興它幫助你。快樂學習。 –