java - 避免在观察者方法中使用instanceOf

标签 java oop instanceof

我有以下 Java 系统:

public class Human {
     public void drown(Animal animal) {
          if (animal instanceOf Fish) {
              return;
          } else {
              animal.die();
          }
     }
}

public abstract class LandAnimal extends Animal{...}
public class Tiger extends LandAnimal{...}

public abstract class Fish extends Animal {...}
public class Trout extends Fish {...}

我想过添加一个方法

public abstract boolean drownable() {...}

在动物类中,但我无权访问动物类的代码。 据我所知,使用 instanceOf 被认为是不好的 OOP 实践。在这种情况下如何避免使用instanceOf?谢谢。

最佳答案

drown() Human中的方法应该是(顺便问一下,人类为什么要淹死动物?):

 public void drown(Animal animal) {
      animal.drown();
 }

每个 Animal就会知道该怎么做,例如:

// in class Tiger
public void drown() {
    die();
}

// in class Fish
public void drown() {
    // do nothing, fish can't drown
}

关于java - 避免在观察者方法中使用instanceOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17126168/

相关文章:

java - 图像文件的加密与解密

java - 配置 mobileFirst keystore 后仍然遇到证书错误

javascript - 具有共享原型(prototype)的instanceof

javascript - 确定一个对象是否是 JavaScript 中的 Map

java - 如何在同一行代码中正确使用instanceof和compareTo?

java - 在 DOM 中使用 mongodb 对象的 _id 值是个好主意吗?

C++11 似乎不可能通过 shared_ptr 访问 protected 成员

java - main 方法在枚举和类中的工作方式是否不同?

python - 在类方法中返回 self - 这是好方法吗?

PE (.exe) 周围的 Java 包装器