0

我有一个 Main 类、一个 X 类和一个 Z 类。

X 有方法 a()。

Z 有方法 b()。

Main 在 Z 中调用方法 b(),然后在 X 中调用方法 a()。

然后我有我的类 X2 及其方法 a2()。

是否可以在不更改 Main 或 X 的情况下通过 Z 的 b() 方法强制 Main 使用 X2 中的方法 a2() 而不是 X 中的 a()?

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 回答