решить, какой метод суперкласса использовать.
При использовании методов по умолчанию эта же проблема возникает и для интерфейсов.
Так как, если класс реализует интерфейс 1 и интерфейс 2 и не реализует общий метод по умолчанию, компилятор не может решить, какой из них выбрать.
Поэтому, обязательным является обеспечение реализации общих методов интерфейсов по умолчанию.
И поэтому, если класс реализует оба вышеупомянутых интерфейса, он должен будет обеспечить реализацию для метода log, иначе компилятор будет выбрасывать ошибку времени компиляции.
Таким образом, методы по умолчанию интерфейса Java помогают расширить интерфейсы, не опасаясь сломать классы реализации.
И методы по умолчанию интерфейса стирают различия между интерфейсами и абстрактными классами.
Если какой-либо класс в иерархии имеет метод с той же сигнатурой, метод по умолчанию теряет смысл для внедрения, чтобы избежать путаницы.
Теперь, статический метод интерфейса похож на метод по умолчанию, за исключением того, что мы не можем переопределить его в классах реализации.
Эта функция помогает избежать нежелательных результатов, связанных с плохой реализацией в классах реализации.
Статический метод интерфейса виден только для методов интерфейса, однако, как и другие статические методы, мы можем использовать статические методы интерфейса, используя его имя.
Статические методы интерфейса хороши для предоставления вспомогательных методов, не требующих реализации в классах.
И можно использовать статические методы интерфейса Java для удаления классов-утилит, и переместить все статические методы классов-утилит в соответствующий интерфейс, который будет легко найти и использовать.
Однако мы не можем определить статический метод интерфейса для методов класса Object, мы получим ошибку компилятора.
Это связано с тем, что Object является базовым классом для всех классов.
В Java 9 вводятся приватные методы и приватные статические методы в интерфейсах.
Чтобы был выбор, какие выставлять клиентам методы реализации.
Соответственно приватные методы интерфейса предназначены для использования в методах по умолчанию интерфейса, а приватные статические методы интерфейса предназначены для использования в статических методах интерфейса.
И приватные методы должны иметь реализацию, они не могут быть абстрактными.
И мы не можем получить доступ или наследовать приватные методы от интерфейса к другому интерфейсу или классу.
Пакеты
Давайте рассмотрим концепцию пакета, которая позволяет программистам лучше структурировать свои программы, что облегчает их понимание и управление.
В большом приложении классов создается тысячи и десятки тысяч.
Поэтому возникает вопрос: Если классов