

Действует как-А.
Интерфейс - это абстрактный базовый класс со всеми чистыми виртуальными членами.
Итак, глядя на ваш Has-A / Is-A, он должен быть похож на то, что вы бы применили для абстрактного базового класса.
Интерфейсы обычно существуют на языках, которые не полностью поддерживают множественное наследование как способ более безопасного предоставления некоторых из тех же преимуществ.
Джоэл, это не совсем то, что есть интерфейс. В некотором смысле он похож на абстрактный базовый класс, но в нем нет реализации методов и свойств.
Это в значительной степени резюмирует, что такое интерфейс.
Отсюда и часть «все чисто виртуальные члены».
Как и в вашем описании методов, я бы также описал интерфейс как «Can-Do». Интерфейс - это договор вроде «все классы, которые меня реализуют, могут делать эти вещи».
Я думаю об объектах как об существительные, о методах как о глаголы и об интерфейсах как о прилагательные (конечно, эта аналогия слишком упрощена, но часто работает достаточно хорошо).
Пример: интерфейс Serializable работает как прилагательное в том смысле, что он применяет некоторые качества к объекту, реализующему этот интерфейс, но не меняет того, что это за объект. Мы можем сказать: «Это сериализуемый объект». Но мы не говорим «этот объект это сериализуемый» и не говорим «этот объект имеет сериализуем».
Мне также нравится отвечать Федерико за то, что интерфейс - «CAN-DO».
Интерфейс - это группа связанных операций, которые поддерживает класс. Вместе методы в интерфейсе описывают, что может делать класс.
Так же, как существительное может иметь несколько прилагательных, класс может реализовывать несколько интерфейсов, если они не конфликтуют. Объединение всех интерфейсов, реализуемых классом, является суммой того, что класс может делать.
На практике интерфейс - это набор сигнатур методов без кода, реализующего эти методы. Просто имя метода и аргументы. В зависимости от языка сигнатура метода может также включать тип возвращаемого значения и создаваемые исключения.
Интерфейс состоит из методов, но не членов данных.
Кстати, я бы не сказал, что подкласс - это HAS-A. Насколько я понимаю, подклассы - это то же самое, что и наследование, поэтому они оба являются IS-A. Тогда как HAS-A называется агрегированием или композицией.
Состав - это место, где объект владеет другим объектом. Уничтожение внешнего объекта также разрушает внутренние объекты. Пример: университет состоит из кафедр. Закройте университет, и кафедры исчезнут.
Агрегирование - это когда объект включает другой объект, но не владеет им. Уничтожение внешнего объекта не разрушает внутренние объекты. Пример: в университете работают профессора, но закрытие университета не убивает профессоров.
композицию можно описать как "has-a", а не как подкласс ...