抽象类的目的是什么?

Spi*_*idE 14 php oop abstract-class interface

我试图在PHP中学习OOP,我对接口和抽象类有一些困惑.它们都不包含任何实现,只包含定义,并且应该通过它们的子类来实现.抽象类的哪一部分明确区别于接口?另外,由于它们有明显的相似性,我应该根据什么原因决定使用一个而不是另一个?

Pau*_*lor 8

可以创建包含具体成员的抽象类,例如方法或属性.您仍然无法直接实例化抽象类,但任何实例化的子类都可以从抽象类中定义的已实现成员中受益.

相比之下,接口从不包含任何实现逻辑.它由每个实现类提供,以提供接口中定义的所有成员的实现.

在我如何查看其区别方面,一个子类的抽象的是,一个类类型.例如DogAnimal.我将界面视为一种关系.例如ICanDisplayImages 告诉我实现类可以显示图像,但不告诉我类实际代表什么.

  • 它标准化了实现的外观.例如,数据库适配器接口可能会定义您必须实现的方法.用户可以只用一个适配器替换另一个适配器,并期望它可以工作,因为接口是相同的. (6认同)

Gor*_*don 5

一个abstract类在它自己和子类之间形成is-a关系,而 aninterface创建一个跟随-a关系。因此,抽象类比接口更具体,它们也可能包含具体的实现(例如模板方法),而接口定义了实现类必须遵循的一组契约方法。这是一个更高级别的抽象,因为实现类不一定是抽象类。使用它来标准化您的 API。

相关问题:https : //stackoverflow.com/search?q=abstract+vs+interface