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

How can i get the value of a variable through the Super keyword?

我有三个 class A,B,C class B extends A and class C extends B.

我想获取 class A 中存在的整数 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);
     }
}
System.out.println(((A)this).a);

在继承层次结构中多次具有相同名称的字段称为 "hidden fields"。

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

如果将 C 分配给变量,将以相同的方式工作。如果变量是 A 类型,你会得到 A.a.

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