Java 子类中的空方法有解决方案吗?

Java 子类中的空方法有解决方案吗?,java,oop,inheritance,Java,Oop,Inheritance,我有一个超类,有两个子类。如果条件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. */

我有一个超类,有两个子类。如果条件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.
   }
}


有没有更干净、更好、更标准的解决方案来解决这个常见问题

您所描述的内容有一个名称:它是。如今,设计模式不像以前那样大肆宣传,但模板方法模式仍然是解决您所描述的一般问题的一种行之有效的方法

如果您想避免在子类中编写空的
doSomething()
方法,那么一种方法是在超类上放置一个空的
doSomething()
方法。这可以服务于多个子类(假设您有两个以上的子类需要担心),但就个人而言,我倾向于对此表示不满。重写非抽象方法应该是罕见的(充其量)例外,而不是常见的做法。

这是“正确”的方法。但有人指出:

  • doSomething()可以是抽象的(如果您希望强制每个子类必须提供特定的实现)
  • 另一方面,doFoo()应该是final,以防止子类更改该行为
派生类中是否需要显式空函数?您可以只在基中使用空函数,并且只在需要它的子类中重写它
class subclass2 extends superclass {
   public void doSomething()  {
     // do nothing
   }
}