我有一个 super 类,有 2 个子类。如果条件 foo 为 true,我希望子类之一采取一些操作,而其他子类不应该执行任何操作:
public void doFoo() {
// some 10 lines common to both subclasses.
boolean foo = checkFoo();
/**
* if foo is true, subclass1 should do something. subcass2 does nothing.
*/
// some 10 lines common to both subclasses.
}
我想出的解决方案:
public void doFoo() {
// some 10 lines common to both subclasses.
boolean foo = checkFoo();
if (foo) {
doSomething();
}
// some 10 lines common to both subclasses.
}
class subclass1 extends superclass {
public void doSomething() {
// some lines of code.
}
}
class subclass2 extends superclass {
public void doSomething() {
// do nothing
}
}
对于这个常见问题有更干净、更好、更标准的解决方案吗?
最佳答案
您所描述的内容有一个名称:它是 Template Method pattern 。如今,设计模式不再像以前那样大肆宣传,但模板方法模式仍然是解决您所描述的一般问题的一种经过验证的真实方法。
如果您想避免在子类中编写空的 doSomething()
方法,那么一种方法是在子类中放置一个空的 doSomething()
方法而是父类(super class)。这可以服务于多个子类(假设您总共有两个以上的子类需要担心),但就我个人而言,我倾向于对此有点皱眉。重写非抽象方法应该是罕见的(最多)异常(exception),而不是常见的做法。
关于java - 子类中的空方法有解决办法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42865951/