首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抽象类的目的是什么?

抽象类的目的是什么?
EN

Stack Overflow用户
提问于 2010-02-18 20:15:35
回答 7查看 5.4K关注 0票数 16

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-02-18 20:31:43

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

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

就我如何看待不同之处而言,抽象的子类是-该类型的类。例如,Dog是一个Animal。我把界面看作是一种做-一种关系。例如,ICanDisplayImages告诉我实现的类可以显示图像,但没有告诉我该类实际表示的是什么。

票数 9
EN

Stack Overflow用户

发布于 2010-02-18 20:30:29

abstract类在其自身和子类之间形成一种is-a关系,而interface则创建一种关注-a关系。因此,抽象类比接口具体得多,它们还可以包含具体的实现(例如Template methods),而接口定义了实现类必须遵循的一组契约方法。这是一个高得多的抽象级别,因为实现类不一定是抽象类。使用它来标准化您的API。

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

票数 5
EN

Stack Overflow用户

发布于 2010-02-18 20:27:57

它们都不包含任何实现..

抽象类可以实现所有方法,也可以只实现部分方法。但主要的理念是通过在子类中添加新的方法来扩展现有的抽象类(扩展基本功能)。

在一个子类中,您只能扩展一个类(抽象类)。抽象类定义您必须实现的功能,或者只是由子类中的其他方法扩展的功能。

接口用于定义类的行为。您可以实现多个接口(假设我的子类必须执行this、this和this thigs!),但您只能扩展一个抽象类。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2288467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档