Я читаю Head First Design Patterns и немного разбираюсь в Java. Он начинается с инкапсуляции вещей, которые отличаются от вашего класса, и помещения их в отдельный интерфейс, в отличие от помещения этих функций в подкласс. В качестве примера они приводят абстрактный класс Duck, который может крякать или летать в зависимости от утки. У них есть интерфейс для Quack and Fly (интерфейсы QuackBehavior и FlyBehavior), а затем они реализуют эти интерфейсы в других классах.
В примере они имеют абстрактный класс утки следующим образом
public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
.....
}
Полагаю, для меня новшеством является наличие переменной экземпляра типа интерфейса. Я никогда не узнал этого раньше, но я предполагаю, что это действительно? Я предполагаю, что я более знаком с наличием переменной экземпляра конкретного класса. Существуют ли какие-либо правила для наличия переменных экземпляра классов / интерфейсов, подобных этому? Спасибо.