Код ниже будет работать для конструктора.
Для любого другого метода - нет, и это разумно потомок должен реализовать метод родителя по-другому, а не делать полностью противоположное действие
class Car
{
protected $engine;
protected $wheels;
public function __construct(Engine $engine, Wheels $wheels)
{
$this->engine = $engine;
$this->wheels = $wheels;
}
public function engineStart()
{
$this->engine->start();
}
}
class Bmw extends Car
{
public function __construct(Wheels $wheels) // ! damn, its OK !
{
$this->wheels = $wheels;
}
}
(new Bmw)->engineStart(); // Trying to call method on null