我坚持使用给定的代码,因为它表示在给定的多级继承中访问 a 的所有值而不创建类的对象。
class A{
public int a = 100;
}
class B extends A{
public int a = 80;
}
class C extends B{
public int a = 60;
}
class D extends C{
public int a = 40;
}
class E extends D{
public int a =10;
public void show(){
int a = 0;
**// How to access all values of (a) here without creating object.**
}
}
public class Inheritance5 {
public static void main(String[] args) {
new E().show();
A a1 = new E();
D d1 = (D) a1;
}
}
AFAIK,只有在为它们创建对象后才能访问实例变量。
答案 0 :(得分:3)
AFAIK,实例变量只能在对象访问后才能访问 为他们创造。
E
是一种实例方法。因此,它已经在一个实例上运行
此外,在调用构造函数时,将调用其父构造函数
因此,调用了声明自己的a
变量的a
的所有层次结构类的构造函数。
要引用D
父类中声明的super.a
,您可以执行this
。
现在剩下的,这有点棘手,但您可以将a
强制转换为每个父类,以便能够引用他们的public void show() {
int a = 0;
int parentD = super.a;
int parentC = ((C)this).a;
int parentB = ((B)this).a;
int parentA = ((A)this).a;
}
变量:
a
请注意,您可以这样做,因为父类中声明的D
变量使用允许private
个实例访问的访问修饰符。
例如,如果您使用{{1}}修饰符,则无法实现。