根据this question,虽然我明白为什么会出错,但如何在保持代码干净的同时有效地解决这个问题呢?我不想将该函数中的内容复制并粘贴到构造函数中。
假设我有以下
class Parent
{
Parent()
{
overridableFunction();
}
void overridableFunction()
{ ... }
}
class Child extends Parent
{
Child()
{
super();
overridableFunction()
}
void overridableFunction()
{ ... // overridden }
}
理想情况下,我希望Child
构造函数的执行流程是
Parent() --> Parent.overridableFunction() --> Child.overridableFunction()
如何在不复制和粘贴内容的情况下实现此目的,从而使代码成为WET?
答案 0 :(得分:1)
如果您希望Parent
的构造函数执行自己的overridableFunction()
和Child
构造函数的实现来执行自己的{{1}实现你基本上说的是,你不希望overridableFunction()
Child
覆盖overridableFunction()
的{{1}}方法。
您可以为这两种方法指定不同的名称,或保持名称相同,但将Parent
的方法设为私有,以避免任何重写。
答案 1 :(得分:0)
我不确定你为什么要这样做,但这遵循你要求的执行流程:
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 ");
}
}