我如何打破java中的继承性质?

时间:2018-05-07 07:59:03

标签: java

我有以下父类: -

class Parent {
    Parent() {
        System.out.print("Parent ");
    }
}

class Child extends Parent {
    Child() {
        System.out.print("Child");
    }
}

所以当我执行Child c = new Child();

我的输出应为“儿童” “父母子女”

我们可以使用反射API吗?

要求: - 我有一个很长的Junit设置层次结构,我希望避免某些类

1 个答案:

答案 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 ");
    }
}