SS
Я про AbstractAnimal, AbstractSwimmingAnimal extends AbstractAnimal, AbstractAttackingAnimal extends AbstractAnimal. Худшее решение, которое может прийти к тебе в голову. А оно придёт. И нормально решается точно не наследованием. Вообще у любой проблемы есть известный паттерн, и в 99% там нет наследования реализации, только интерфейса.