Эта статья продолжает цикл материалов об объектно-ориентированном программировании. Если вы еще не ознакомились с введением в ООП, следует это сделать.
Итак, про наследование я уже рассказывал, и множественное наследование звучит как-то интуитивно понятно, но не спешите. Если делать наивные догадки, то можно было бы предположить, что от класса A наследуется класс B, а от класса B наследуется класс C, и это называется множественным наследованием? Нет, на самом деле всё не так. Вместо вертикальной иерархии здесь используется горизонтальная.
Иначе говоря, при обычном наследовании у класса есть только один прямой родитель, а при множественном наследовании их может быть два, типа "мама" и "папа", или больше.
Чтобы сделать множественное наследование, нужно условно написать вот так (условно, потому что я не использую никакой конкретный язык, я только иллюстрирую понятия)
class C extends A, B {
...
}
...то есть указать не одно имя родителя, а несколько. Всё остальное происходит как обычно – класс наследует свойства и методы всех своих родителей и пользуется ими как своими. И пожалуй, на этом можно было бы и закончить, но данная тема вызывает много вопросов.
Например, если у родителя A есть метод move() и у родителя B есть метод move(), то что произойдет, если у их потомка C вызвать метод move()? Транслятор языка увидит, что нужно обратиться к родителю класса C, чтобы найти у него метод move(), но у C есть два родителя, и у каждого из них есть такой метод. Какой из них тогда вызывать?
Честно говоря, я даже не знаю, что произойдёт. Мои предположения, как вообще можно решить такую проблему: либо будет использован тот родитель, который указан первым, либо использовать родителей с одинаковыми методами будет вообще запрещено. В общем, если вам доведется познакомиться с языком, в котором есть множественное наследование, то нужно будет почитать документацию, как оно там организовано.
А многие языки действительно не имеют множественного наследования, причем некоторые не имеют его умышленно, исходя из вышеизложенных причин. Необходимо ли оно? По большому счету нет. Если нет множественного наследования, задачу всегда можно решить как-то по-другому.