Поддерживает ли Java множественное наследование классов?

«Поддерживает ли Java множественное наследование классов?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, в Java множественное наследование классов (от нескольких родительских классов) запрещено. Это решение было принято для избежания проблемы "ромбовидного наследования" (diamond problem) и усложнения архитектуры.

Проблема "ромба":

// Представим, если бы было можно:
class A { void method() { System.out.println("A"); } }
class B extends A { void method() { System.out.println("B"); } }
class C extends A { void method() { System.out.println("C"); } }
// От какого method() должен наследовать D? От B или C? Неоднозначность!
class D extends B, C { } // В Java так НЕЛЬЗЯ

Альтернатива: множественная реализация интерфейсов. Класс может реализовывать любое количество интерфейсов. Начиная с Java 8, интерфейсы могут содержать default-методы с реализацией, что позволяет наследовать поведение.

Разрешение конфликтов default-методов:

interface Engine {
    default void start() { System.out.println("Engine starts"); }
}

interface AirConditioner {
    default void start() { System.out.println("AC starts"); }
}

class Car implements Engine, AirConditioner {
    // Компилятор требует явного разрешения конфликта имён
    @Override
    public void start() {
        // Явный выбор реализации или своя логика
        Engine.super.start(); // Запускаем двигатель первым
        AirConditioner.super.start(); // Затем кондиционер
    }
}

Итог: Java использует одиночное наследование классов + множественную реализацию интерфейсов. Это обеспечивает гибкость повторного использования кода, избегая семантических проблем.