兩個接口這不起作用:無法實現具有相同的方法名
interface TestInterface
{
public function testMethod();
}
interface TestInterface2
{
public function testMethod();
}
class TestClass implements TestInterface, TestInterface2
{
}
給我的錯誤:
Fatal error: Can't inherit abstract function TestInterface2::testMethod() (previously declared abstract in TestInterface).
是正確的嗎?爲什麼這是不允許的?對我來說沒有意義。
這也會出現在抽象函數中,例如,如果您實現了一個接口,然後從具有相同名稱的抽象函數的類繼承。
但接口的全部意義在於它們沒有實現。如果你想讓你的類可以傳遞給一個爲參數指定一個接口的函數,另一個接口指定另一個接口,但都有一個共同的方法?像「getName()」這樣的方法名稱在另一個接口上不會有不同的用途。 – Gnuffo1 2011-03-31 09:20:41
在這種情況下,您應該創建一個新的界面,例如'INamed'只包含'getName()'方法。 – ThiefMaster 2011-03-31 09:24:02
他們沒有實現,但他們確實有語義,至少隱含。雖然你可以在一個接口中實現一個方法,在使用它的不同類中具有完全不同的含義,但這與接口的精神相反。但是,如果實現兩個不同的接口,則不能保證它們的說明符知道對方的任何內容,因此名稱相似的方法具有相似的語義。我想你可以讓每個接口擴展一個包含常用方法的通用接口。 – 2011-03-31 09:27:53