2

私は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() {...}

クラスAnimalでは、Animalクラスのコードにアクセスできません。私が知っているように、instanceOf の使用は悪い OOP プラクティスと見なされます。この場合、instanceOf の使用を避けるにはどうすればよいですか? ありがとう。

4

3 に答える 3

2

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
}
于 2013-06-15T17:36:31.900 に答える
2

で宣言Animal.drown()してオーバーライドしFish、適切な「kill コード」を含めます:)。したがって、各動物を呼び出すだけdrown()で、各インスタンスはそのタイプ固有のメソッド実装に従って動作します。

public class Human {
     public void drown(Animal animal) {
         animal.drown();
     }
}
于 2013-06-15T17:38:26.140 に答える