4

子类无法实现父类实现的相同接口是正常行为吗?我有 PHP v5.6

interface blueprint {
    public function implement_me();
}

class one implements blueprint {

    public function implement_me() {

    }

}

class two extends one implements blueprint {


}

//no fatal error triggered for class two 

编辑:所以即使我blueprint在子类中实现了接口two而没有方法impement_me()为什么子类不能实现相同的接口父类实现,上面的代码也没有错误或警告?

blueprint如果我实现了类以外的另一个接口,two那么它可以工作,我必须blueprint_new在类中使用方法,two否则会触发致命错误。这部分按预期工作。

interface blueprint {
    public function implement_me();
}

class one implements blueprint {

    public function implement_me() {

    }

}


interface blueprint_new {
    public function todo();
}


class two extends one implements blueprint_new {


}

//this will trigger fatal error.
4

1 回答 1

8

子类自动继承父类的所有接口。

有时你不想要这个,但你仍然可以在子类中实现任何,甚至多个接口。

唯一不行的就是扩展一个接口,就像一个类(或抽象类)不能实现一样。

您的第二个代码中触发的错误是因为您没有实现blueprint_newclass 中 interface 的所有方法two,但您的代码基本上没有任何问题。

例子:

class MobilePhone implements GsmSignalPowered {}
class SamsungGalaxy extends MobilePhone implements UsbConnection {}
interface ThunderboltPowered {}
interface GsmSignalPowered {}
interface UsbConnection {}

$s = new SamsungGalaxy();
var_dump($s instanceof GsmSignalPowered); // true
var_dump($s instanceof UsbConnection); // true
var_dump($s instanceof ThunderboltPowered); // false

$m = new MobilePhone();
var_dump($m instanceof GsmSignalPowered); // true
var_dump($m instanceof UsbConnection); // false
var_dump($m instanceof ThunderboltPowered); // false
于 2016-10-31T16:49:53.543 回答