Main クラス、X クラス、Z クラスがあります。
X には a() メソッドがあります。
Z にはメソッド b() があります。
Main は Z でメソッド b() を呼び出し、次に X でメソッド a() を呼び出します。
次に、メソッド a2() を持つクラス X2 を作成します。
Main または X を変更せずに、Z の b() メソッドを介して、Main が X の a() の代わりに X2 のメソッド a2() を使用するように強制することは可能ですか?
Main クラス、X クラス、Z クラスがあります。
X には a() メソッドがあります。
Z にはメソッド b() があります。
Main は Z でメソッド b() を呼び出し、次に X でメソッド a() を呼び出します。
次に、メソッド a2() を持つクラス X2 を作成します。
Main または X を変更せずに、Z の b() メソッドを介して、Main が X の a() の代わりに X2 のメソッド a2() を使用するように強制することは可能ですか?
いいえ、それはできません。Main クラスはまだ X のインスタンスを作成するからX x = new X()
です。
Main クラスでオーバーライドするメソッドを呼び出す唯一の方法は、Main の呼び出しX.a()
を に変更することX x = new X2()
です。
あなたの質問を理解できれば、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
}
}