Итак, при моделировании вы должны думать:
Какие фактические животные?
например. киты, выдры -> классы
которые являются типами животных ?
например. птица. -> абстрактный класс
Так как каждый эму - птица.
Это называется принцип замещения Лискова https://en.wikipedia.org/wiki/Liskov_substitution_principle
Какие характеристики у животного?
например. WaterDweller, Winged -> это интерфейсы.
У каждого класса может быть один суперкласс, он может иметь много характеристик, например, крылатый, или водный житель, или усыновленный
одно дополнение для вашего примера летучей мыши:
Это является млекопитающим -> поэтому его суперкласс является млекопитающим. Он является крылатым - что характерно - поэтому он реализует крылатый интерфейс.
class Bat extends Mammal implements Winged{
}