Подтвердить что ты не робот

Интерфейс Java 9 vs Class

Так как Java 9 позволяет нам определять методы private и private static тоже в интерфейсах, какова будет остальная разница в interface и class? Более того, Java медленно продвигается к множественному наследованию?

4b9b3361

Ответ 1

Частные интерфейсные методы в Java 9 ведут себя точно так же, как и другие частные методы: они должны иметь тело (даже в абстрактных классах) и не могут быть вызваны или переопределены подклассами. Таким образом, они действительно не взаимодействуют с наследованием. Говоря о том, что (и особенно множественное наследование), есть (по крайней мере?) Три его вида:

  • Наследование типов означает, что один тип может быть другим типом, например. String является Object. Java допускает множественное наследование типов с первого дня (через интерфейсы).
  • Наследование поведения означает, что один тип может наследовать поведение другого типа. До Java 8 только классы могли реализовывать методы, поэтому было только одно наследование такого рода. В Java 8 появились методы по умолчанию, которые позволяют интерфейсам реализовывать методы, тем самым предоставляя множественное наследование поведения Java.
  • Наследование состояния означает, что тип наследует другое внутреннее состояние другого типа (то есть поля). В соответствии с этим (Java 9 и все, что в настоящее время предлагается для будущих версий Java), только классы могут иметь состояние, поэтому существует только одно наследование такого рода.

Как вы можете видеть, методы частного интерфейса ничего не добавляют.

Что касается вашего вопроса о сравнении интерфейсов и классов, есть два основных отличия: множественное наследование и состояние. Интерфейсы поддерживают первый, классы могут иметь последний. Поскольку состояние типично для типичного ООП, классы будут оставаться актуальными. 😉

Если бы интерфейс для принуждения реализации к определенному непубличному полю или прямому определению определял сам, игра изменилась, а интерфейсы могли бы конкурировать с классами.

Ответ 2

Частные методы не наследуются подклассами, поэтому эта функция не влияет на классы реализации. Я считаю, что частные методы в интерфейсах позволяют нам использовать код между методами по умолчанию.

Интерфейсы Java по-прежнему не могут иметь нестатические элементы. Это большая разница, а не множественное наследование IMO.

Ответ 3

Интерфейсы Java 9 по-прежнему не могут содержать поля и конструкторы. Это делает огромную разницу между классами и интерфейсами, поэтому Java 9 далека от множественного наследования.

Ответ 4

Интерфейс Java в версии 9 имеет частные методы, но статические частные. Эта функция была введена для модульных методов. Одна функция должна работать с одной ответственностью вместо использования длинных методов по умолчанию. Это не имеет ничего общего с многократным наследованием. Чем более частные статические методы, тем больше вы сможете написать чистый и многоразовый код.. В любом случае, статические методы, запрещенные как public, так и protected, не могут быть переопределены.