0

Main クラス、X クラス、Z クラスがあります。

X には a() メソッドがあります。

Z にはメソッド b() があります。

Main は Z でメソッド b() を呼び出し、次に X でメソッド a() を呼び出します。

次に、メソッド a2() を持つクラス X2 を作成します。

Main または X を変更せずに、Z の b() メソッドを介して、Main が X の a() の代わりに X2 のメソッド a2() を使用するように強制することは可能ですか?

4

2 に答える 2

2

いいえ、それはできません。Main クラスはまだ X のインスタンスを作成するからX x = new X()です。

Main クラスでオーバーライドするメソッドを呼び出す唯一の方法は、Main の呼び出しX.a()を に変更することX x = new X2()です。

于 2013-01-24T17:29:16.740 に答える
0

あなたの質問を理解できれば、Z が X の作成に責任があり、X2 が X を拡張する場合、はい。これはポリモーフィズムと呼ばれます。次の例を検討してください。

public class X {
    public void a() {
        System.out.println("X.a");
    }
}

public class X2 extends X {
    public void a() {
        System.out.println("X2.a");
    }
}

public class Z {
    private X my_x;
    public Z() {
        this.my_x = new X2();
    }

    public X getX() {
        return my_x;
    }

    public void b() {
        System.out.println("Z.b");
    }
}

public class Main {
    public static void main(String[] Args) {
        Z z = new Z();
        X x = z.getX();
        z.b();
        x.a();  // this prints. X2.a
    }
}
于 2013-01-24T17:48:04.197 に答える