首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抽象类和接口的主要区别是什么?

抽象类和接口的主要区别是什么?
EN

Stack Overflow用户
提问于 2010-08-27 22:37:28
回答 3查看 1.6K关注 0票数 2

在最近面试趋势的背景下,我注意到这个问题每次都会出现。但是当一个人回答了一般的定义,那么面试官就会说每个人都知道……说点不一样的。进一步的场景是问在哪里使用哪一个是有益的,为什么?

因此,请分享对这个话题的任何新见解。

先谢谢你...

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-27 22:39:05

抽象类可以定义方法的基实现以及受保护或私有的数据成员,而接口仅定义类必须与公共数据成员一起提供的功能。

我喜欢这样看待它:抽象类是其他类的基础。它不仅指定了特定的一系列事物必须具有的操作,而且还指定了这些操作执行其工作所需的数据。特定的子节点可以添加(如果需要,甚至可以忽略)特定的数据元素。另一方面,接口是一种契约-它没有说明你将如何做某事,只有你必须做的事情和你将使外部世界可见的事情。你的内部工作是你自己在接口中的事。

票数 4
EN

Stack Overflow用户

发布于 2010-08-27 22:39:35

抽象类可以为它们的方法提供实现,而接口严格地提供了一个约定(对象必须实现什么方法)。

当您想要为继承者提供一个基本实现,但又不想直接创建类的实例时,抽象类非常有用。例如,考虑一辆汽车。你可能不想创建一辆通用汽车,但每种关怀都可以共享一些基本的功能:

代码语言:javascript
复制
public abstract class Car
{
    public InternalCombustionEngine Engine { get; private set; }

    public virtual void Start()
    {
        Engine.Start();
    }

    public abstract void Drive();
}

当您有一些可能彼此不直接相关的类,但您希望以相同的方式处理这些类时,接口非常有用,因为每个类都有一组相似的功能。

票数 4
EN

Stack Overflow用户

发布于 2010-08-27 22:46:08

除了其他人所说的之外,我将接口视为跨类通用但不在is-a关系中的行为的关系。它是一种表达常见行为的方式,而不是继承is-a关系。我相信这就是为什么有些人会把接口称为穷人的多重继承。

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

https://stackoverflow.com/questions/3585243

复制
相关文章

相似问题

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