java - 子类中的空方法有解决办法吗?

标签 java oop inheritance

我有一个 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/

相关文章:

python - 测试 python 类对象实例

c++ - 指向成员函数的函数指针

java - 抽象中的功能和实现细节之间有什么区别?

c# - 为什么声明派生类时必须在接口(interface)之前指定基类?

java - 从内部类继承。从对内部类的引用访问封闭实体

java - 用于在字符串中查找模式的正则表达式

java - float 操作按钮加号未显示

C++ 避免向下转型

java - 如何从 3d 数组打印一些值

java - 显示随机访问文件中的信息