【发布时间】:2015-11-18 06:49:48
【问题描述】:
无法理解为什么两个函数调用的输出为“3”和“4”。对于,
g2.foo( t1 );
在编译时,g2 是类型 A,它查找 foo(type C),它在它的主类中找不到,所以它查找它的子类 B,然后是 C。所以 foo(... ) 应该绑定到
public void foo(C p) {
System.out.println("5");
}
子类 C 对吗?
然后在运行时 g2 将是 C 类型并调用 foo(C p) 将导致输出“5”。我不确定我对多态性的逻辑/理解哪里错了。
class A {
public void foo(A p) {
System.out.println("1");
}
}
class B extends A {
public void foo(B p) {
System.out.println("2");
}
}
class C extends B {
public void foo(A p) {
System.out.println("3");
}
public void foo(B p) {
System.out.println("4");
}
public void foo(C p) {
System.out.println("5");
}
}
public class HelloWorld {
public static void main(String[] args) {
A g2 = new C();
B r2 = new C();
C t1 = new C();
g2.foo(t1); // 3
r2.foo(new C()); // 4
}
}
【问题讨论】:
标签: java polymorphism extends