Сколько интерфейсов может реализовать один класс в Java?
- Есть ли в Java множественное наследование?
- Почему класс может наследовать только один класс?
- Что такое проблема ромба и как её решают default-методы?
Интерфейсов — сколько угодно, класс-родитель — только один.
- Множественное наследование классов запрещено из-за конфликта состояния и реализаций
- У интерфейса нет полей-состояния, поэтому реализовать можно много
А ещё С default-методами конфликт возможен — класс обязан переопределить метод явно
Подробно
В Java класс наследует ровно один класс (extends), но реализует любое число интерфейсов (implements A, B, C).
Почему так: при множественном наследовании классов возникает неоднозначность — «проблема ромба». Если два родителя содержат поле или метод с одинаковым именем, непонятно, что наследует потомок, и как инициализировать состояние двух родителей. Java избегает этого, разрешая только одного родителя-класса.
У интерфейсов нет состояния экземпляра, поэтому реализовать несколько безопасно. Интерфейс описывает роль объекта: класс может быть одновременно Comparable, Serializable и AutoCloseable.
С Java 8 у интерфейсов есть default-методы с реализацией, и конфликт снова возможен: если два интерфейса дают default-метод с одной сигнатурой, компилятор потребует переопределить его в классе и, при желании, вызвать нужный вариант через A.super.method().
Пример
interface Flyer { default String move() { return "fly"; } }
interface Swimmer { default String move() { return "swim"; } }
class Duck implements Flyer, Swimmer {
@Override
public String move() { return Flyer.super.move() + " and " + Swimmer.super.move(); }
}Что хотят услышать
- Ответ: интерфейсов сколько угодно, родитель-класс один.
- Причина — проблема ромба и состояние.
- Интерфейс как роль объекта.
- Конфликт default-методов и его решение — плюс.
Частые ошибки
- Считать, что интерфейсы полностью заменяют абстрактные классы.
- Забывать, что состояние в интерфейсе объявить нельзя.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Не более одного, как и при наследовании классов
- ✓Сколько угодно
- ✗Не более двух интерфейсов
- ✗Столько же, сколько классов он наследует
Что спросят дальше
- Что произойдёт при конфликте одинаковых default-методов?
- Когда выбирают абстрактный класс, а не интерфейс?
Разбор темы
- Интерфейсы против абстрактных классов
Контракт против частичной реализации, default/static/private-методы, разрешение конфликта default-методов и критерий выбора.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.