很常见:但让我感到困惑
我所知道的,当具有相同名称的变量隐藏时,具有相同声明的方法被覆盖。
class Test1 {
String dependsOnA="15";
}
class Beta extends Test1 {
String dependsOnA="19";
}
public class Test{
public static void main(String s[]){
Test1 beta=new Beta();
System.out.println(beta.dependsOnA);
}
}
为什么在我的代码Output Is-
15
因为变量dependsOnA
15
的值已被19
隐藏。
答案 0 :(得分:3)
当您使用其编译类型为超类Test1
的类型的变量来访问dependsOnA
时,您将访问该超类中声明的变量。正在访问的变量取决于beta
变量的编译类型,因为它没有覆盖变量。
仅当您通过编译时类型为dependsOnA
的变量访问Beta
时才会发生隐藏。
答案 1 :(得分:2)
始终记住,在继承期间,基于引用类型访问字段,并根据对象类型访问 override方法。因此,答案为15
而非19
,因为引用的类型为Test1