【发布时间】:2016-04-11 15:18:48
【问题描述】:
我有一个抽象类(Parent),它有一个抽象方法(doSetup)和一个调用doSetup 方法的成员方法。我需要的是子类(实现Parent)在构造时应该自动调用doSetup 方法,不管子类可能有多少构造函数。是否有 Java 机制或设计模式可以帮助我解决这个问题?
public abstract class Parent {
abstract protected void sayHi();
protected void doSetup() {
sayHi();
}
}
public class Child1 extends Parent {
@Override
protected void sayHi() {
System.out.println("hi");
}
public Child1() {
// Construction needs to automatically include exec of doSetup()
}
public Child1(String string) {
// Construction needs to automatically include exec of doSetup()
System.out.println("another constructor");
}
}
【问题讨论】:
-
只需在基类的构造函数中调用 doSetup() 方法。如果您希望此后包含特定方法的基类功能,只需使用
super.methodYouWishToCall()。 -
正如我所说,在你的基类的构造函数中强制执行。然后,当实例化任何子类时,必须调用基类的构造函数,强制调用该方法。如果您不确定我在这里的意思,我可以将其写下来作为您的答案。
-
@yamori 这听起来是个好主意,但实际上并非如此。你永远不应该从构造函数中调用可覆盖的方法。这在 Effective Java 中有很好的解释。
-
同意。它不会被覆盖。在我看来,它必须是私有的或最终的。如果它的代码必须是通用的并且不被子类覆盖。
-
我会为你写一个答案。
标签: java oop design-patterns java-8