PHP, OOP接口与抽象interface and abstraction

PHP, OOP interface and abstraction

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the difference between an interface and abstract class?

我读了一本关于界面和抽象之间的区别的指南,但我不理解,指南说:当我们可以使用抽象方法时,为什么要使用精确的接口?答案是,使用接口并不要求我们继承某个抽象类,因此,不从同一类继承的两个类可以包含类似的接口,实际上,使用接口不允许用冗余方法来扩充父类。我真的很理解它,但它没有登记,如果有人能帮我在这里我会非常感谢。


关于何时使用接口和抽象类的一些建议(礼貌:msdn)

1)如果预期要创建组件的多个版本,请创建一个抽象类。抽象类提供了一种简单易行的方法来版本化您的组件。通过更新基类,所有继承类都将随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,则必须创建一个全新的接口。
BR/>2)如果您正在创建的功能在各种不同的对象中都很有用,请使用接口。抽象类应该主要用于密切相关的对象,而接口最适合为不相关的类提供公共功能。

3)如果要设计小而简洁的功能,请使用接口。如果要设计大型功能单元,请使用抽象类。
BR/>4)如果要在组件的所有实现中提供通用的、实现的功能,请使用抽象类。抽象类允许您部分实现类,而接口不包含任何成员的实现。
BR/>

http://msdn.microsoft.com/en-us/library/scsyfw1d%28v=vs.71%29.aspx


接口允许您在几个不相关的类层次结构中基于类似的方法集合拥有多态性。这意味着您可以对一个方法进行编码,以使用一系列不一定相互关联的类中的任何一个。您还可以通过将多个接口应用于一个类来混合和匹配,这样类可以用于许多事情。

相比之下,抽象方法只允许您互换地使用父类的直接后代,这是有限的,因为您不能有多个行为集合(因为类只能有一个父类)。