Substituir parâmetro de método com interface filho como um novo parâmetro

Eu não consigo descobrir porque este código não funciona em PHP?

<?php

interface Engine {

    function run();
}

interface HydroEngine extends Engine {

    function run();
}

interface Car {

    function setEngine(Engine $engine);

}

interface WaterCar extends Car {

    function setEngine(HydroEngine $engine);
}

?>

Parece que não quebra nenhuma regra OOP, mas por que isso me dá um erro?

Fatal error: Declaration of WaterCar::setEngine() must be compatible with Car::setEngine(Engine $engine)

questionAnswers(2)

yourAnswerToTheQuestion