两个接口这不起作用:无法实现具有相同的方法名
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