Может ли интерфейс расширять несколько интерфейсов в Java? Этот код отображается в моей среде IDE и компилируется:
interface Foo extends Runnable, Set, Comparator<String> { }
но я слышал, что в Java запрещено множественное наследование. Почему для интерфейсов существует исключение?
Ответы:
Да, ты можешь сделать это. Интерфейс может расширять несколько интерфейсов, как показано здесь:
Один класс также может реализовывать несколько интерфейсов. Что, если у двух интерфейсов есть метод, определяющий одно и то же имя и подпись?
Тут есть хитрый момент:
Тогда для обоих работает единая реализация :).
Прочтите мой полный пост здесь:
http://codeinventions.blogspot.com/2014/07/can-interface-extend-multiple.html
источник
void test()
и интерфейс Bboolean test()
? (Это двоюродный брат проблемы с бриллиантами ?) __ Пробовал, и происходит разумная вещь: не допускается, если тип возвращаемого значения отличается.Интерфейс может расширять несколько интерфейсов .
Класс может реализовать несколько интерфейсов .
Однако класс может расширять только один класс .
Будьте осторожны при использовании слов
extends
иimplements
при разговоре оinterface
иclass
.источник
Ответ: да.
Согласно JLS
источник
Из страницы документации Oracle о многожильном типе наследования, мы можем найти точный ответ здесь . Здесь мы должны сначала узнать тип множественного наследования в java: -
Java "не поддерживает множественное наследование состояния, но поддерживает множественное наследование реализации с помощью методов по умолчанию, начиная с выпуска java 8, и множественное наследование типа с интерфейсами.
Тогда возникает вопрос о «алмазной проблеме» и о том, как Java справляется с этим:
В случае множественного наследования реализации Java-компилятор выдает ошибку компиляции и просит пользователя исправить ее, указав имя интерфейса. Пример здесь: -
Итак, здесь мы получим ошибку, так как: - интерфейс D наследует несвязанные значения по умолчанию для метода () от типов B и C, интерфейс D расширяет B, C
Вы можете исправить это так: -
В заключение мы можем сказать, что java не поддерживает множественное наследование состояния, но поддерживает множественное наследование реализации и множественное наследование типа .
источник
Вы можете расширить несколько,
Interfaces
но не можете расширить несколькоclasses
.Причина, по которой в Java невозможно расширить несколько классов, заключается в неудачном опыте использования C ++ там, где это возможно.
Альтернативой для множественного наследования является то, что класс может реализовывать несколько интерфейсов (или интерфейс может расширять несколько интерфейсов)
источник
Я думаю, что ваша путаница связана с множественным наследованием, при котором это плохая практика, а в Java это также невозможно. Однако в Java разрешена реализация нескольких интерфейсов, и это тоже безопасно.
источник
например, посмотрите здесь: http://www.tutorialspoint.com/java/java_interfaces.htm
источник