Почему бы не использовать оператор instanceof в дизайне ООП?

Неоднократно говорилось, что оператор instanceof не должен использоваться, кроме как в методе equals (), иначе он 'плохой ООП дизайн.

Некоторые писали, что это тяжелая операция, но кажется, что, по крайней мере, Java, справляется с этим довольно хорошо (даже более эффективно, чем сравнение Object.toString ()).

Может кто-нибудь объяснить, или направить меня к какой-то статье, которая объясняет, почему это плохой дизайн?

Учти это:

Class Man{
  doThingsWithAnimals(List animals){
    for(Animal animal : animals){
      if(animal instanceOf Fish){
        eatIt(animal);
      }
      else if(animal instanceof Dog){
        playWithIt(animal);
      }
    }
  }
  ...
}

Решение о том, что делать с животным, остается за человеком. Мужчина'Желания также могут время от времени меняться, решая съесть собаку и поиграть с рыбой, пока животные нет изменить.

Если вы считаете, что оператор instanceof имеет неправильный дизайн ООП, расскажите, пожалуйста, как бы вы сделали это без instanceof и почему?

Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос