我有一个 Main 类、一个 X 类和一个 Z 类。
X 有方法 a()。
Z 有方法 b()。
Main 在 Z 中调用方法 b(),然后在 X 中调用方法 a()。
然后我有我的类 X2 及其方法 a2()。
是否可以在不更改 Main 或 X 的情况下通过 Z 的 b() 方法强制 Main 使用 X2 中的方法 a2() 而不是 X 中的 a()?
我有一个 Main 类、一个 X 类和一个 Z 类。
X 有方法 a()。
Z 有方法 b()。
Main 在 Z 中调用方法 b(),然后在 X 中调用方法 a()。
然后我有我的类 X2 及其方法 a2()。
是否可以在不更改 Main 或 X 的情况下通过 Z 的 b() 方法强制 Main 使用 X2 中的方法 a2() 而不是 X 中的 a()?
不,你不能这样做,因为 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
}
}