Java 继承期间未隐藏变量的值
非常常见:但让我困惑 据我所知,具有相同声明的方法被重写,而具有相同名称的变量被隐藏Java 继承期间未隐藏变量的值,java,inheritance,Java,Inheritance,非常常见:但让我困惑 据我所知,具有相同声明的方法被重写,而具有相同名称的变量被隐藏 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();
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);
}
}
为什么在我的代码中输出是-
15
由于变量
dependsOnA
15
的值已被19
隐藏 当您使用编译类型为超类Test1
类型的变量访问dependsOnA
时,您可以访问该超类中声明的变量。被访问的变量取决于beta
变量的编译类型,因为变量没有重写
只有当您使用编译时类型为
Beta
的变量访问dependsOnA
时,隐藏才会发生。当您使用编译类型为超类Test1
的变量访问dependsOnA
时,您访问该超类中声明的变量。被访问的变量取决于beta
变量的编译类型,因为变量没有重写
只有通过编译时类型为
Beta
的变量访问dependsOnA
时,才会发生隐藏。请记住,在继承过程中,字段是基于引用类型访问的,重写的方法是基于对象类型访问的。因此,答案是15
而不是19
,因为引用的类型是Test1
请记住,在继承过程中,字段是基于引用类型访问的,重写的方法是基于对象类型访问的。因此,答案是15
,而不是19
,因为引用类型是Test1