Скажем, у меня есть 2 класса с именем class Cow
ad class Pig
.
Оба они реализуют interface Animal
.
Для interface
есть только 2 метода с именами public void eat()
и public void speak()
.
Все в порядке. Но хотя это кажется хорошим использованием interface
s, я подумал, что если мне когда-нибудь понадобится добавить метод(ы) к этому interface
, реализация сломается, а именно мне нужно будет реализовать новые методы в этих классах, что нарушает "закрыть -открытый принцип».
Поэтому я подумал, что в дополнение к interface
я бы также использовал класс abstract
, если мне понадобится добавить новые методы в будущем.
Так, например, public class Cow extends ... implements Animal
.
Звучит как хороший план (если это не так, пожалуйста, поправьте меня).
Но проблема в том, что если эти классы extend
уже являются каким-то другим классом? В таком случае я не мог расширить 2 класса.
Итак, мой вопрос:
Есть ли шаблон, в котором я мог бы объявить общие
interface
связанных классов, удерживая при этом возможность добавлять новые методы в будущем, которые не нарушают «принцип закрытого-открытого» и не нарушают реализации?