使用Reflection用基类构造函数覆盖超类构造函数

时间:2016-11-22 12:19:47

标签: java class reflection constructor

我有一个场景,我希望根据类中的某些条件覆盖带有子类的基类的构造函数创建。

以下是这些课程: 1)参考 2)其他(基础班) 3)OtherImpl(其他子类) 4)RefWorking(主要课程)

Class Ref正在调用Other类的构造函数,我想用OtherImpl的构造函数覆盖这个构造函数。

class Ref {

    private String s = "Original";
    private Other o;

    public Ref() {
    }

    public void method1(int a) {
        o = new Other();
        System.out.println("Method 1 : "+ s);
    }

    private void method2(String a) {
        System.out.println("Method 2 : "+ a);
    }
}

class Other {

    public Other() {
        System.out.println("Default Other Constructor");
    }
}


class OtherImpl extends Other {

    public OtherImpl() {
        System.out.println("Reflection Constructor");
    }
}

public class RefWorking {

    public static void main(String args[]) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
        Ref r = new Ref();

        Class c = r.getClass();

        OtherImpl oi = new OtherImpl();

        Field f = c.getDeclaredField("o");
        f.setAccessible(true);
        f.set(r, oi);

        r.method1(10);  
    }
}

它提供以下输出:

默认其他构造函数 反射构造函数 默认其他构造函数 方法1:原始

但我的预期输出是: 默认其他构造函数 反射构造函数 默认其他构造函数 反射构造函数 方法1:原始

1 个答案:

答案 0 :(得分:0)

我担心你无法覆盖base class constructor,因为 OtherImpl class无法继承Other Class构造函数,更不用说覆盖它了。

这篇文章可能会对你有帮助。 Is Constructor Overriding Possible?