我有一个场景,我希望根据类中的某些条件覆盖带有子类的基类的构造函数创建。
以下是这些课程: 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:原始
答案 0 :(得分:0)
我担心你无法覆盖base class constructor
,因为
OtherImpl class
无法继承Other Class
的构造函数,更不用说覆盖它了。
这篇文章可能会对你有帮助。 Is Constructor Overriding Possible?