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
我很高兴它帮助你。快乐学习。 –