为什么运行时Poymorphism行为会改变类变量

时间:2012-09-12 10:51:57

标签: java polymorphism

  

可能重复:
  Hiding instance variables of a class

我有以下课程

AbstractTest

public abstract class AbstractTest {
 protected int testVar = 10;
}

测试

public class Test extends AbstractTest {
int testVar = 5;

public static void main(String[] args) {
    AbstractTest test = new Test();
    System.out.println(test.testVar);//Prints 10

    Test secondTest = new Test();
    System.out.println(secondTest.testVar);//Prints 5
}
}

为什么以上程序会针对第一种情况打印10而针对第二种情况打印5,尽管它是同一类的对象,即Test()

更新

I am now confused about how memory is allocated to Object and its variables. As instance variable is getting changed based on Class which is behaviour of Static?

更新:1

Every object will have two variables so question of same memory allocation does not comes in to picture. Thanks.

3 个答案:

答案 0 :(得分:2)

这在JLS 15.11.1

中定义
  

[在表达式Primary.Identifier]中,只有主表达式的类型,而不是运行时引用的实际对象的类,用于确定要使用的字段。

答案 1 :(得分:1)

该变量根据类的引用使用。因此,当使用AbstractTest引用时,testVar类使用AbstractTest

答案 2 :(得分:1)

一个硬盘和一个快速规则:

字段用于引用类型,而方法用于实际对象。

testAbstractTest的引用,因此使用了基类字段。

secondTestderive class的引用,因此使用派生类字段。