Ви можете створити інтерфейси для занять на тваринах (клас у біологічному значенні), наприклад, 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
, яка просто нічого не говорить про те, для чого вам потрібен інтерфейс. У цьому полягає відмінність питання: побудуйте ієрархію спадкування за допомогою інтерфейсів, використовуйте абстрактні класи, коли це корисно, застосуйте конкретні класи, де це необхідно, та використовуйте делегування, якщо це доречно.