В чем разница между множественным наследованием и полиморфизмом? - PullRequest
4 голосов
/ 23 апреля 2010

В чем разница между множественным наследованием и полиморфизмом?

В книге я красную строчку излагаю

нет поддержки множественного наследования на уровне класса. Это означает, что вы не можете продлевать более одного класса одновременно.

Что противоречит концепции полиморфизма, описанной в той же книге, что и

полиморфизм - это процесс создания нескольких объектов из определенных базовых классов

Теперь, если множественное наследование не разрешено в PHP, тогда как разрешается полиморфизм?

Ответы [ 3 ]

19 голосов
/ 23 апреля 2010

Как сказал Икке, множественное наследование не имеет ничего общего с полиморфизмом.

Если бы я мог нарисовать диаграмму классов, множественное наследование выглядит так:

Base A    Base B
  ^         ^
   \       /
    \     /
     Child

Итак, класс Child будет наследовать как атрибуты, так и поведение от обоих классов. Многие языки, такие как Java и PHP, не позволяют этого, но Python делает.

Полиморфизм , с другой стороны, это когда вы можете абстрагироваться от специализации. Прежде всего, диаграмма классов:

     Animal
     ^    ^
    /      \
   /        \
 Cat        Dog

И вы можете сделать следующее:

// Assuming we have a pack of animals
// This is Java
for (Animal pet : pack)
    pet.speak();

Каждый pet будет говорить разные вещи в зависимости от реализации.

3 голосов
/ 23 апреля 2010

Множественное наследование означает, что объект наследуется от двух разных родительских классов. ProgrammerBicyclist - это и программист, и велосипедист. Проблема возникает, когда класс Programmer определяет свои данные-члены favorite_activity как hacking, тогда как у Bicyclist также есть favorite_activity, но это riding. Если вы спросите программиста-велосипедиста, каков ее favorite_activity, каков правильный ответ?

Полиморфизм имеет дело с поведением объектов. Он позволяет вам сказать объекту что-то сделать, и полученное действие зависит от класса объекта, даже если вы точно не знаете, что это такое. Таким образом, вы сталкиваетесь с человеком, хотя вы не знаете, программист это или повар, и говорите ей perform_your_job(). Если это Программист, она напишет код, если это повар, она приготовит еду, но вам не нужно специально указывать ей write_code() или make_a_meal().

1 голос
/ 23 апреля 2010

Эти двое имеют мало общего друг с другом.

Множественное наследование - это то, что статично после времени компиляции / выполнения. Полиморфизм - это метод, при котором только во время выполнения фактически определяется, какой метод для подтипа вызывается.

PHP не допускает множественного наследования.

...