继承期间变量的值不被隐藏

时间:2015-05-25 10:40:24

标签: 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();
        System.out.println(beta.dependsOnA);
    }

}

为什么在我的代码Output Is-

15

因为变量dependsOnA 15的值已被19隐藏。

2 个答案:

答案 0 :(得分:3)

当您使用其编译类型为超类Test1的类型的变量来访问dependsOnA时,您将访问该超类中声明的变量。正在访问的变量取决于beta变量的编译类型,因为它没有覆盖变量。

仅当您通过编译时类型为dependsOnA的变量访问Beta时才会发生隐藏。

答案 1 :(得分:2)

始终记住,在继承期间,基于引用类型访问字段,并根据对象类型访问 override方法。因此,答案为15而非19,因为引用的类型为Test1