我有以下课程
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.
答案 0 :(得分:2)
[在表达式
Primary.Identifier
]中,只有主表达式的类型,而不是运行时引用的实际对象的类,用于确定要使用的字段。
答案 1 :(得分:1)
该变量根据类的引用使用。因此,当使用AbstractTest
引用时,testVar
类使用AbstractTest
。
答案 2 :(得分:1)
一个硬盘和一个快速规则:
字段用于引用类型,而方法用于实际对象。
test
是AbstractTest
的引用,因此使用了基类字段。
secondTest
是derive class
的引用,因此使用派生类字段。