如何打破java中的继承特性?
我有以下家长班级:-如何打破java中的继承特性?,java,Java,我有以下家长班级:- class Parent { Parent() { System.out.print("Parent "); } } class Child extends Parent { Child() { System.out.print("Child"); } } 所以当我执行Child c=newchild()时 我的输出应该是“Child”而不是“Parent-Child” 我们可以使用反射API来实现吗 要求
class Parent {
Parent() {
System.out.print("Parent ");
}
}
class Child extends Parent {
Child() {
System.out.print("Child");
}
}
所以当我执行Child c=newchild()时代码>
我的输出应该是“Child”而不是“Parent-Child”
我们可以使用反射API来实现吗
要求:-
我有一个很长的Junit设置层次结构,我想避免对某些类使用它。当创建子类时,首先调用父类构造函数,然后调用子类构造函数
如果必须更改父构造函数中发生的情况,则可以将相关代码提取到受保护的方法中,这样就可以在子类中重写它
但是它容易出错,不推荐使用()
你不能。子类的构造函数必须始终调用超类的构造函数。因此,请从父类中删除println
。否。我不明白你为什么要做这样的事。不调用构造函数就不能创建类;因此,如果需要创建一个Parent
,则需要调用Parent()
。由于子项
是一个父项
,因此必须调用父项()
来创建子项
。(虽然我所说的并不是严格意义上的真实,但原因远远超出了您当前的级别,可以忽略而不失去普遍性)真正的问题是您为什么认为需要它?我有一个很长的Junit设置层次结构,我希望避免某些类“您可以将文本提取到字段并重写”-无法覆盖字段。“您可以将文本提取到字段中并覆盖其值”-具体来说。但是,是的,我没有告诉我们正确的词语。当涉及到字段时,“override”一词的用法是错误的,请改写您的答案,或许可以提供一个示例。在任何情况下,OP都无法更改父项
,因此此答案不相关。
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 ");
}
}