【发布时间】:2009-12-16 23:54:37
【问题描述】:
考虑一下:
class A {
int x =5;
}
class B extends A{
int x =6;
}
public class CovariantTest {
public A getObject() {
return new A();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
CovariantTest c1 = new SubCovariantTest();
System.out.println(c1.getObject().x);
}
}
class SubCovariantTest extends CovariantTest {
public B getObject(){
return new B();
}
}
据我所知,JVM会根据其对象的真实类型来选择方法。这里真正的类型是SubCovariantTest,它定义了一个覆盖方法getObject。
程序打印的是 5,而不是 6。为什么?
【问题讨论】:
标签: java methods overriding