如何通过 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.
无论如何:请不要在生产代码中使用隐藏字段
我有三个 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.
无论如何:请不要在生产代码中使用隐藏字段