0

AA内部のクラスの「i」変数にアクセスするにはどうすればよいmeth3()ですか? 呼び出してみましたが、クラスの変数をsuper.i呼び出すだけです。iBB

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);
    }
}
4

5 に答える 5

1

にキャストthisしてfromAAを読み取ることができます: iAA

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

版画

10

于 2013-06-03T04:59:47.023 に答える
1

クラスが別のクラスを拡張すると、元のクラスからすべての非プライベート変数が継承されます。そこで、コンパイラが認識できるようにクラスを書き直しましょうBB(要点を説明するために疑似コードを書きます)。

class BB extends AA{

int i = 10;//inherited from AA

int i = 20;

}

通常、同じ名前を共有する 2 つの変数 (iこの場合) を持つクラスを作成すると、コンパイル エラーが発生します。ただし、拡張クラスの場合、元のクラスから継承された変数と同じ名前を共有する変数はすべて上書きされます。元のifrom クラスはfrom ClassAAによって上書きされます。これは、名前のシャドウイングまたは名前の隠蔽として知られています。この詳細な説明を参照してください。iBB

インスタンスから、またはインスタンスAA iから変数にアクセスする場合は、使用しているオブジェクトを class にキャストする必要があります。BBCCAA

AA iこれは、あなたが要求した変数にアクセスするように書き直された、あなたが提供したテストクラスです:

public class Test {

    public static void main(String[] args) {

        CC cc = new CC();
        AA aa = (AA) cc;//cast the CC class instance to an AA instance

        aa.i;//equals 10
        cc.i;//equals 30

    }
}
于 2013-06-03T05:32:38.230 に答える
0

super キーワードを使用すると、直接のスーパー クラスの変数にアクセスできます... AA クラスの 'i' 値にアクセスするには、CC クラスで meth2() を呼び出す必要があります...これにより、目的の値が出力されます...

于 2013-06-03T05:03:18.583 に答える
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 ;
}
}
于 2013-06-03T04:55:29.907 に答える