Так как у не каждое животное может ходить, плавать и летать, все эти три метода не должны были быть в классе Animal. В главном классе я прохожусь цыклом по всем животным и вызываю эти три метода. Чтобы не заставлять плавать, летать и ходить животных, которые этого не могут, пришлось в классе Animal так же определить методы ifToGo, ifFly, ifSwim в классе Animal которые тоже не должны были быть там и еще в каждом наследнике переопределять соответствующий метод и возвращать false. В результате:
- Переопределения методов ifToGo, ifFly, ifSwim у наследников много ненужного кода
- Всеравно есть возможность вызова метода ходить, летать или плавать у животных, которые этого немогут