我有以下父类: -
class Parent {
Parent() {
System.out.print("Parent ");
}
}
class Child extends Parent {
Child() {
System.out.print("Child");
}
}
所以当我执行Child c = new Child();
我的输出应为“儿童” 不 “父母子女”
我们可以使用反射API吗?
要求: - 我有一个很长的Junit设置层次结构,我希望避免某些类
答案 0 :(得分:-1)
当您创建Child类时,首先调用Parent的类构造函数,然后调用Child的构造函数。
如果您必须更改父构造函数中发生的事情,您可以做的是将相关代码提取到受保护的方法中,这样您就可以在Child类中覆盖它 然而,它容易出错且不推荐(What's wrong with overridable method calls in constructors?)
class Parent {
Parent() {
overridableInit();
}
protected void overridableInit() {
System.out.print("Parent ");
}
}
//If you want to extend the behavior:
class Child1 extends Parent {
@Override
protected void overridableInit() {
super.overridableInit();
System.out.print("Child1 ");
}
}
//If you want to skip the Parent behavior:
class Child2 extends Parent {
@Override
protected void overridableInit() {
System.out.print("Child2 ");
}
}