Ответ 1
Частные интерфейсные методы в Java 9 ведут себя точно так же, как и другие частные методы: они должны иметь тело (даже в абстрактных классах) и не могут быть вызваны или переопределены подклассами. Таким образом, они действительно не взаимодействуют с наследованием. Говоря о том, что (и особенно множественное наследование), есть (по крайней мере?) Три его вида:
- Наследование типов означает, что один тип может быть другим типом, например.
String
являетсяObject
. Java допускает множественное наследование типов с первого дня (через интерфейсы). - Наследование поведения означает, что один тип может наследовать поведение другого типа. До Java 8 только классы могли реализовывать методы, поэтому было только одно наследование такого рода. В Java 8 появились методы по умолчанию, которые позволяют интерфейсам реализовывать методы, тем самым предоставляя множественное наследование поведения Java.
- Наследование состояния означает, что тип наследует другое внутреннее состояние другого типа (то есть поля). В соответствии с этим (Java 9 и все, что в настоящее время предлагается для будущих версий Java), только классы могут иметь состояние, поэтому существует только одно наследование такого рода.
Как вы можете видеть, методы частного интерфейса ничего не добавляют.
Что касается вашего вопроса о сравнении интерфейсов и классов, есть два основных отличия: множественное наследование и состояние. Интерфейсы поддерживают первый, классы могут иметь последний. Поскольку состояние типично для типичного ООП, классы будут оставаться актуальными. 😉
Если бы интерфейс для принуждения реализации к определенному непубличному полю или прямому определению определял сам, игра изменилась, а интерфейсы могли бы конкурировать с классами.