Java 当构造函数需要调用可重写方法时,保持其干燥

Java 当构造函数需要调用可重写方法时,保持其干燥,java,oop,constructor,Java,Oop,Constructor,根据,虽然我理解它出错的原因,但如何在保持代码干燥的同时有效地解决这个问题?我不想将该函数中的内容复制并粘贴到构造函数中 假设我有以下几点 class Parent { Parent() { overridableFunction(); } void overridableFunction() { ... } } class Child extends Parent { Child() { super()

根据,虽然我理解它出错的原因,但如何在保持代码干燥的同时有效地解决这个问题?我不想将该函数中的内容复制并粘贴到构造函数中

假设我有以下几点

class Parent
{
    Parent()
    {
        overridableFunction();
    }

    void overridableFunction()
    { ... }
}

class Child extends Parent
{
    Child()
    {
        super();
        overridableFunction()
    }

    void overridableFunction()
    { ... // overridden }
}
理想情况下,我希望
子构造函数的执行流是
Parent()-->Parent.overridableFunction()-->Child.overridableFunction()


如果您希望父级
的构造函数执行其自己的
overridableFunction()
实现,并且希望子级的构造函数执行其自己的
overridableFunction()
实现,那么如何在不复制和粘贴内容的情况下实现这一点呢,你基本上是说你不想让
Child
overridableFunction()
重写
Parent
overridableFunction()
方法


您可以为这两个方法指定不同的名称,或保持名称相同,但要将父方法设置为私有,以避免任何重写。

我不确定您为什么要这样做,但这遵循您要求的执行流程:

class Parent
{
    Parent()
    {
        overridableFunction();
    }

    void overridableFunction()
    { System.out.println("Parent implementation "); }

    public static void main(String[] args) {
         new Child();
    }
}

class Child extends Parent
{
    Child()
    {
        super();
        //remove overridableFunction();
    }

    @Override
    void overridableFunction()
    {
        super.overridableFunction();
        System.out.println("Child implementation ");
    }
}

不会删除
overridableFunction()Child
构造函数的code>导致
Parent
Child
各自执行自己的
overridableFunction()
?@c0根据OP编写的内容(
理想情况下,我希望执行…
),他希望在创建子类实例时执行这两个方法。因此,他不想移除它。