Каким видом полиморфизма является этот код?
class A {
public function method1() {
return $this->method2();
}
protected function method2() {
return 'A';
}
}
class B extends A {
protected function method2() {
return 'B';
}
}
$b = new B();
echo $b->method1();
Нашел такой код на одном сайте, там пишут, что это полиморфизм. Но где тут полиморфизм? Я вижу тут переопределение метода и все. Чтобы был полиморфизм подтипов (включения), здесь не хватает функции, которая будет в аргументах принимать подтипы базового класса А. Верно же?
Ответы (1 шт):
В приведенном примере НЕТ полиморфизма. Это пример наследования.
Полиморфизм, это когда с использованием переменной базового класса выполняются действия объекта, созданного на основе класса-потомка.
Если бы в примере была сделана типизация переменной $b по типу A и вызывался бы метод method2 (для этого он должен быть публичным), тогда был бы полиморфизм.
Можно подумать, что в операторе
$this->method2();
в методе method1() класса A случается полиморфизм.
Но это не "чистый" пример полиморфизма. Так как метод используется изнутри самого базового класса. Это, скорее, пример абстракции.