我有三个班A
,B
,C
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);
}
}
答案 0 :(得分:3)
System.out.println(((A)this).a);
在继承hierarchie中多次使用具有相同名称的字段称为"隐藏字段"。
对字段(和静态方法)的访问基于所使用的引用的(静态)类型。这意味着如果您将引用(此处为此)转换为您想要的类型(在该情况下为A)并访问该字段,您将获得属于A的字段。
如果将C分配给变量,将以相同的方式工作。如果变量是A类型,您将获得A.a。
无论如何:请不要在生产代码中使用隐藏字段