package test;
class A
{
int x = 5;
}
class B extends A
{
int x = 6;
}
public class CovariantTest
{
public A getObject()
{
return new A();
}
public static void main(String[]args)
{
CovariantTest c1 = new SubCovariantTest();
System.out.println(c1.getObject().x);
}
}
class SubCovariantTest extends CovariantTest
{
public B getObject()
{
return new B();
}
}
最后输出的答案是5不是6
stackoverflow上面的解释我看了还是不太理解。
1.成员变量是编译时决定我了解,但这与“c1.getObject().x”有什么关系?毕竟c1.getObject()返回的是类B的对象呀?
2.解释里提到了隐藏域,子类的域会隐藏父类同名域,和重写是不一样的。我不太明白这个与答案有什么联系?
stackoverflow的问题地址:
http://stackoverflow.com/questions/12589274/slight-confusion-regarding-overriding-where-variables-are-concerned