如何打破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 ");
    }
}