Ви можете створити інтерфейси для занять на тваринах (клас у біологічному значенні), наприклад, public interface Equidaeдля коней та public interface Avialaeптахів (я не біолог, тому умови можуть бути неправильними).
Тоді ви все ще можете створити
public class Bird implements Avialae {
}
і
public class Horse implements Equidae {}
і також
public class Pegasus implements Avialae, Equidae {}
Додавання з коментарів:
Щоб зменшити повторюваний код, ви можете створити абстрактний клас, який містить більшість загальних кодів тварин, які ви хочете реалізувати.
public abstract class AbstractHorse implements Equidae {}
public class Horse extends AbstractHorse {}
public class Pegasus extends AbstractHorse implements Avialae {}
Оновлення
Я хотів би додати ще одну деталь. Як зауважує Брайан , це те, що вже знала ОП.
Однак я хочу підкреслити, що я пропоную обійти проблему "багатонаспадкування" з інтерфейсами, і що я не рекомендую використовувати інтерфейси, які вже представляють конкретний тип (наприклад, Bird), але більше поведінку (інші посилаються на качка-типізація, що теж добре, але я маю на увазі просто: біологічний клас птахів, Avialae). Я також не рекомендую використовувати імена інтерфейсів, починаючи з великої літери "Я", наприклад IBird, яка просто нічого не говорить про те, для чого вам потрібен інтерфейс. У цьому полягає відмінність питання: побудуйте ієрархію спадкування за допомогою інтерфейсів, використовуйте абстрактні класи, коли це корисно, застосуйте конкретні класи, де це необхідно, та використовуйте делегування, якщо це доречно.