Если мой класс implements
- интерфейс, то могу ли я сказать, что я следую за наследством? Я знаю, что когда класс extends
другой класс, то это наследование.
Если мой класс implements
- интерфейс, то могу ли я сказать, что я следую за наследством? Я знаю, что когда класс extends
другой класс, то это наследование.
Ответы:
ОБНОВЛЕНИЕ: я пересмотрел этот ответ. Ряд положительных моментов был поднят в комментариях, которые заслуживают упоминания.
Если мой класс реализует интерфейс, могу ли я сказать, что я следую наследованию?
Не совсем понятно, что вы имеете в виду под «следующим наследованием». Давайте зададим немного другой вопрос?
Что такое наследство?
Это немного разные. Это прискорбно, потому что это сбивает с толку.
Какие путаницы обычно возникают из-за этого тонкого различия?
Путаница может возникнуть, потому что люди думают о наследовании как о механизме обмена деталями реализации. Хотя это такой механизм, который работает механизм путем обмена членов . Эти члены не должны иметь реализации! Как мы увидим, они могут быть абстрактными.
Лично я был бы счастлив, если бы в спецификациях Java и C # использовалось слово, отличное от «наследует», для описания взаимосвязи между интерфейсными методами и классами, чтобы избежать этой путаницы. Но они этого не делают, и мы должны исходить из спецификаций, а не против них.
В Java наследуются ли элементы интерфейса классами, которые их реализуют?
Да, некоторые См. Раздел спецификации Java 8.4.8, который я привожу здесь для вашего удобства.
Класс C наследует от своего прямого суперкласса и прямых суперинтерфейсов все абстрактные и стандартные методы m, для которых выполняются все следующие условия: [...]
Если вы говорите, что класс реализует интерфейс, тогда класс наследует абстрактные и стандартные методы этого интерфейса . (Конечно, я пропустил следующие условия; подробности см. В спецификации. В частности, класс, который реализует элемент интерфейса, не считается унаследованным этим членом. Опять же, это сбивает с толку? Да.)
Мы обычно говорим в Java, что класс наследует от интерфейса?
Обычно мы бы сказали, что класс реализует интерфейс. Как отмечено выше, класс может наследовать члены от интерфейса, и все же не сказано, что он наследует от интерфейса. Что сбивает с толку, да.
Имеет ли это тонкое различие значение в повседневной работе?
Обычно нет. Этот вид узкого анализа спецификации более полезен для авторов компиляторов, чем для бизнес-разработчиков. Гораздо важнее понять, когда использовать интерфейс, чем получить точное определение «наследует от».
java
так что это правильный ответ, если ОП не означало что-то другое java
:-)
Наследование означает написание нового подкласса для суперкласса. Написание нового класса для интерфейса реализует этот интерфейс. (А написание нового интерфейса на основе старого расширяет этот интерфейс.)
Единственный правильный термин, который применяется ко всем трем возможностям, это подтип . Не каждый подтип является подклассом.
С подклассами вы
С помощью интерфейсов вы выполняете контракт, реализуя заявленные методы.
Это классический взгляд на это. Теперь с Java 8 интерфейсы становятся смесью:
Будет ли реализация интерфейса, все методы которого имеют реализации по умолчанию, по-прежнему считаться «реализацией» или, скорее, расширением? Я не мог сказать. Так как этот случай довольно надуманный (это фактически позволило использовать множественное наследование без сохранения состояния), я бы по-прежнему использовал «наследование» только с подклассами.