【发布时间】:2017-10-27 03:18:57
【问题描述】:
假设我在 Java 中有以下类:
class B {
public void foo(B obj) {
System.out.print("B1 ");
}
public void foo(C obj) {
System.out.print("B2 ");
}
}
public class C extends B {
public void foo(B obj) {
System.out.print("C1 ");
}
public void foo(C obj) {
System.out.print("C2 ");
}
public static void main(String[] args) {
B c = new C();
B b = new B();
b.foo(c);
c.foo(b);
c.foo(c);
}
}
为什么我会得到以下结果:
B1
C1
C1
我不明白这部分到底发生了什么:
c.foo(b); // 打印 C1
c.foo(c); // 打印 C1
【问题讨论】:
-
您预计会发生什么?此外,请合理地格式化您的代码,以便其他人更容易阅读。
-
因为java没有双重调度。它使用参数的编译时类型来决定调用哪个方法。
-
多态性只出现在点之前。它不适用于方法参数。
标签: java