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