如何通过Super关键字获取变量的值?

时间:2016-07-09 07:52:03

标签: java super

我有三个班ABC B级扩展A,C级扩展B.

我想获取a中存在的整数class A的值,并在class C中打印该值。我的第一选择是通过super关键字进行打印。

package testee;
import java.util.Scanner;


public class Testee {

    public static void main(String[] args) {

        new C();

    }
}


class A{

    int a=10;

    A(){

        System.out.println(a);
    }

}


class B extends A{

    int a=13;

    B(){

        System.out.println(a);
    }

}


class C extends B{

     int a=21;

     C(){

         System.out.println(super.a);
     }
}

1 个答案:

答案 0 :(得分:3)

System.out.println(((A)this).a);

在继承hierarchie中多次使用具有相同名称的字段称为"隐藏字段"。

对字段(和静态方法)的访问基于所使用的引用的(静态)类型。这意味着如果您将引用(此处为此)转换为您想要的类型(在该情况下为A)并访问该字段,您将获得属于A的字段。

如果将C分配给变量,

将以相同的方式工作。如果变量是A类型,您将获得A.a。

无论如何:请不要在生产代码中使用隐藏字段