Как проблема ромбовидного наследования решена в java
4 года назад
Человек-Молекула
Ответы
В Java
проблема ромбовидного наследования (diamond problem
) решается с помощью дефолтной методики (default method
), которая была введена в Java 8
Дефолтный метод - это метод, который имеет реализацию по умолчанию в интерфейсе и может быть унаследован несколькими классами. Таким образом, вместо того, чтобы создавать неоднозначность в ромбовидном наследовании, классы могут использовать дефолтную реализацию метода из интерфейса.
К примеру, у нас есть следующая иерархия классов и интерфейсов:
- Здесь интерфейс
A
имеет дефолтную реализацию методаfoo()
, которая выводит строку "A". - Интерфейс
B
также имеет дефолтную реализацию методаfoo()
, которая выводит строку "B". - Класс
C
реализует оба интерфейсаA
иB
.
При вызове метода foo()
из экземпляра класса C
, будет использоваться реализация метода foo()
из интерфейса B
, что приведет к выводу строки "B".
Таким образом, в Java
ромбовидное наследование не приводит к неоднозначностям, благодаря использованию дефолтных методов.
2 года назад
Иван Полежаев