Вы не можете изменить тип возвращаемого значения или аргументы переопределения - подписи всегда должны совпадать.
Но ваша текущая модель наследования позволит вам вернуть B для A:
class B extends A {
override public function get value():A{
return new B();
}
}
, и вы можете привести возвращаемое значение к B в методе вызывающей стороны.
Другой способ сделать это - установить тип возвращаемого значения на *, но вам придется позаботиться о проверке типа самостоятельно.