Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
<?php
class Animal
{
public function speak(): string { return 'hum'; }
}
class Dog extends Animal
{
public function speak(): string { return 'woof'; }
public function talk(): string { return parent::speak() . '!'; }
}
echo (new Dog())->speak(), ' ', (new Dog())->talk(), "\n";woof hum!
- Ждать, что
parent::speak()вызовет переопределение, как$this->speak():parent::всегда зовёт версию родителя, поэтому даже внутриDogвозвращаетhum. - Считать метод с именем родительского повторным объявлением: дочерний класс может переопределить любой метод родителя без
final, и его объекты берут версию дочернего класса.
- Что вызовет
$this->speak()внутриAnimal, если объект —Dog? - Почему конструктор дочернего класса должен сам вызывать
parent::__construct()?