0

このコードでは、オブジェクトを 1 つだけ割り当てますが、何らかの方法で x のコピーを 2 つ (基本クラス用に 1 つとサブクラス用に 1 つ) 格納します。オブジェクトが1つしかない場合、どのように可能ですか? 2 つの x 変数を格納するスペースはどこにありますか? 実際には2つのオブジェクトが作成されるということですか?

class App {

    class Base {
        public int x;

        public Base() {
            x = 2;
        }

        int method() {
            return x;
        }
    }

    class Subclass extends Base {
        public int x;

        public Subclass() {
            x = 3;
        }

        int method() {
            return x;
        }
    }

    public static void main(String[] args) {
        new App().run();
    }

    public void run() {
        Base b = new Subclass();
        System.out.println(b.x);
        System.out.println(b.method());
    }
}
4

3 に答える 3

3

1 つxはスーパークラスに属し、もう 1 つはサブクラスに属します。それらが同じ名前を持っているという事実は重要ではなく、クラスでアクセス式を修飾することで両方にアクセスできます。

((Base)b).x
((Subclass)b).x

(最初の行のキャストは必要ないことに注意してください。対称にするために入れました)

于 2013-08-03T11:00:23.263 に答える
0

これによるとtutorial(セクション「サブクラスでできること」)、スーパークラスのフィールドと同じ名前のサブクラスのフィールドを宣言すると、この場合x、スーパークラスのフィールドは非表示になります。は、サブクラスに実際には 2 つxの があり、1 つはそれ自体用、もう 1 つはそのスーパークラス用であり、同じ name のみをむき出しにしていることを意味しますx。を使用して派生クラスderivedObject.xのものとサブクラスのものを参照できます((Base)derivedObject).x(または派生クラス内の場合は super.x )

于 2013-08-03T11:16:51.387 に答える
0

Java ではオーバーロードできませんvariables。同じ名前ですが、クラスが異なります。

于 2013-08-03T11:03:34.637 に答える