如何从子类体访问隐藏的超类实例变量?

时间:2017-09-05 17:15:27

标签: java inheritance

我坚持使用给定的代码,因为它表示在给定的多级继承中访问 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,只有在为它们创建对象后才能访问实例变量。

1 个答案:

答案 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}}修饰符,则无法实现。