В чем косяк (полиморфизм)? Недавно ходил на собеседование и и меня попросили рассказать , что такое полиморфизм.
Ответил следующие. class unit {
public $hp = 'NaN';
public function setHp (){
return $this->hp = "30 hp";
}
}
class warrior extends unit {
public function setHp (){
return $this->hp = "80 hp";
}
}
class medic extends unit {
public function setHp (){
return $this->hp = "40 hp";
}
}
class tank extends unit {
public function setHp (){
return $this->hp = "200 hp";
}
}
$warrior = new warrior;
$medic = new medic;
$tank = new tank;
$unit = new unit;
echo $warrior->setHp();
echo $medic->setHp();
echo $tank->setHp();
echo $unit->setHp();
Тот , кто мне собеседовал , сказал , что это не правильно . ( гуглил в инете везде подобных примеров полным полно). В чем я ошибаюсь ?

21 Авг 2019 в 07:02
188 +1
0
Ответы
1

Ошибка заключается в том, что полиморфизм в объектно-ориентированном программировании означает возможность использования объектов разных классов через общий интерфейс. В данном примере классы warrior, medic и tank наследуются от базового класса unit, но переопределяют метод setHp(). Однако, для реализации полиморфизма, необходимо создать интерфейс или абстрактный класс, который определит метод setHp(), а затем каждый из дочерних классов будет реализовывать этот метод по-своему.

Правильный подход к реализации полиморфизма в данном случае может быть следующим:

interface UnitInterface {
public function setHp();
}
class unit implements UnitInterface {
public $hp = 'NaN';
public function setHp (){
return $this->hp = "30 hp";
}
}
class warrior extends unit {
public function setHp (){
return $this->hp = "80 hp";
}
}
class medic extends unit {
public function setHp (){
return $this->hp = "40 hp";
}
}
class tank extends unit {
public function setHp (){
return $this->hp = "200 hp";
}
}
$warrior = new warrior;
$medic = new medic;
$tank = new tank;
$unit = new unit;
echo $warrior->setHp();
echo $medic->setHp();
echo $tank->setHp();
echo $unit->setHp();

В этом коде создается интерфейс UnitInterface, который определяет метод setHp(). Затем классы unit, warrior, medic и tank реализуют этот интерфейс и переопределяют метод setHp() соответственно. Таким образом, обеспечивается правильная реализация полиморфизма.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 706 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир