覆盖方法而不更改任何原始代码

时间:2013-01-24 17:20:56

标签: java class methods override

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

X的方法是a()。

Z的方法是b()。

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

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

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

2 个答案:

答案 0 :(得分:2)

不,你不能这样做,因为Main类仍然创建一个X X x = new X()的实例。

如果您将Main中的调用更改为X.a(),则让Main类调用覆盖X x = new X2()的方法的唯一方法。

答案 1 :(得分: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
    }
}