我注意到当我将方法定义为抽象时,子类的签名需要与它兼容。这使我无法使用子类签名中的类型检查。
如果我将父方法定义为具有默认实现的具体方法,那么我可以覆盖父方法而不遵守其接口。
如果存在合适的默认实现,我倾向于使用第二种方法。但是我让自己陷入困境吗?
我觉得“抽象”的使用可能是如此限制,所以我想知道我是否遗漏了某些内容......
注意 - 我看到类似的问题已经被问到与其他语言有关,但不是PHP。
答案 0 :(得分:7)
这是一个非常广泛的问题,但用几句话来说:
如果您不尊重接口 - 它会创建脆弱的设计,因为即使根据定义,每个子节点都应该支持所有祖先接口 - 您可以打破它,而不是定义不兼容的接口。
有一个很好的法律:http://en.wikipedia.org/wiki/Liskov_substitution_principle
此外,这通常是一个标志,你应该更喜欢委托而不是继承。
答案 1 :(得分:4)
接口(或抽象类)强制与您的类保持一致。这是你和你继承的班级之间的合同。当几个人编写代码并且您希望可靠地交换类时,这种一致性是关键。