我正在尝试学习PHP中的OOP,我对接口和抽象类有一些困惑。它们都不包含任何实现,只包含定义,并且应该通过它们的子类来实现。抽象类的哪个部分明确地将它们与接口区分开来?另外,由于它们明显的相似性,基于什么原因,我应该决定使用其中一个而不是另一个?
发布于 2010-02-18 20:31:43
可以创建包含具体成员的抽象类,如方法或属性。您仍然不能直接实例化抽象类,但是任何实例化的子类都可以从抽象类中定义的实现成员中受益。
相比之下,接口从不包含任何实现逻辑。由每个实现类提供接口中定义的所有成员的实现。
就我如何看待不同之处而言,抽象的子类是-该类型的类。例如,Dog是一个Animal。我把界面看作是一种做-一种关系。例如,ICanDisplayImages告诉我实现的类可以显示图像,但没有告诉我该类实际表示的是什么。
发布于 2010-02-18 20:30:29
abstract类在其自身和子类之间形成一种is-a关系,而interface则创建一种关注-a关系。因此,抽象类比接口具体得多,它们还可以包含具体的实现(例如Template methods),而接口定义了实现类必须遵循的一组契约方法。这是一个高得多的抽象级别,因为实现类不一定是抽象类。使用它来标准化您的API。
相关问题:https://stackoverflow.com/search?q=abstract+vs+interface
发布于 2010-02-18 20:27:57
它们都不包含任何实现..
抽象类可以实现所有方法,也可以只实现部分方法。但主要的理念是通过在子类中添加新的方法来扩展现有的抽象类(扩展基本功能)。
在一个子类中,您只能扩展一个类(抽象类)。抽象类定义您必须实现的功能,或者只是由子类中的其他方法扩展的功能。
接口用于定义类的行为。您可以实现多个接口(假设我的子类必须执行this、this和this thigs!),但您只能扩展一个抽象类。
https://stackoverflow.com/questions/2288467
复制相似问题