Поддерживается ли множественное наследование классов в языках программирования?

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

Ответ

Поддержка множественного наследования классов зависит от языка программирования:

  • Запрещено в Java, C#, Ruby. Класс может наследовать только от одного родительского класса, но может реализовывать несколько интерфейсов.
  • Разрешено в C++, Python, но требует осторожности.

Проблема в C++ (ромбовидное наследование):

class A { public: int data; };
class B : public A {};
class C : public A {};
class D : public B, public C {}; // D содержит ДВЕ копии A::data

Решение — виртуальное наследование.

Пример в Java (интерфейсы):

interface Flyable { void fly(); }
interface Swimmable { void swim(); }
class Duck implements Flyable, Swimmable {
    public void fly() { System.out.println("Flying"); }
    public void swim() { System.out.println("Swimming"); }
}

Best Practice: Вместо множественного наследования часто предпочитают композицию (включение объектов других классов) для большей гибкости и избежания сложных иерархий.