如何从类中访问字段?

时间:2013-06-03 04:50:14

标签: java inheritance

如何在AA内访问meth3()课程的'i'变量?我尝试拨打super.i,但只调用i类的BB变量。

public class SuperTest {

    public static void main(String[] args) {
        CC cc = new CC();
        cc.meth3();
    }
}

class AA {
    int i=10; // **I mean this variable to access somehow**
}

class BB extends AA{
    int i=20;

    void meth2(){
        System.out.println(super.i);
    }
}

class CC extends BB{
    int i=30;

    void meth3(){
        System.out.println(super.i);
    }
}

5 个答案:

答案 0 :(得分:1)

您可以将this投射到AA,以便从i阅读AA

class CC extends BB {
    int i = 30;
    void meth3() {
        System.out.println(((AA) this).i);
    }
}

打印

  

10

答案 1 :(得分:1)

public class Test {

    public static void main(String[] args) {

        CC cc = new CC();
        cc.meth3();

    }
}

class AA {

    int i = 10; // **I mean this variable to access somehow**
}

class BB extends AA {

    int j = 20;

}

class CC extends BB {

    int k = 30;

    void meth3() {
        System.out.println(i);
        System.out.println(j);
        System.out.println(k);

    }
}

输出

10
20
30

答案 2 :(得分:1)

当一个类扩展另一个类时,它会继承原始类中的所有非私有变量。 所以,让我们重写BB类,就像编译器可能会看到它一样(裸露在我身边,我将编写无效代码来说明一点):

class BB extends AA{

int i = 10;//inherited from AA

int i = 20;

}

现在通常情况下,如果我们编写一个包含两个共享相同名称的变量的类(在这种情况下为i),我们会得到一个编译错误。但是在扩展类的情况下,任何与从原始类继承的变量共享同一名称的变量都将被覆盖。来自班级i的原始AA会被来自班级i的{​​{1}}覆盖。这称为名称遮蔽或名称隐藏。请参阅此more in depth explanation

如果您想要从BBAA个实例访问i BB变量,则需要将您正在使用的对象转换为类{{1} }。

以下是您提供的测试类,并根据您的要求重写以访问CC AA变量:

AA

答案 3 :(得分:0)

您应该了解引用之间的类对象。

反正

试试此代码

public class SuperTest {

    public static void main(String[] args) {


        CC cc = new CC();
        cc.meth3();

AA aa = new AA();
System.out.println(aa.getI());

    }

}


class AA {
    int i=10; // **I mean this variable to access somehow**
public int getI() {
   return this.i;
}

public void setI(int i) {
   this.i = i ;
}
}

class BB extends AA{
    int i=20;

    void meth2(){
        System.out.println(super.i);

    }
public int getI() {
   return this.i;
}

public void setI(int i) {
   this.i = i ;
}
}

class CC extends BB{
    int i=30;

    void meth3(){
        System.out.println(super.i);

    }

public int getI() {
   return this.i;
}

public void setI(int i) {
   this.i = i ;
}
}

答案 4 :(得分:0)

super关键字允许你访问立即超类的变量...来访问你需要在CC类中调用meth2()的AA类的'i'值...这将打印所需的vaue ..