【问题标题】:What is the major difference between abstract class and interface?抽象类和接口之间的主要区别是什么?
【发布时间】:2011-04-04 20:32:27
【问题描述】:

在最近的采访趋势中,我注意到这个问题每次都会出现。但是当一个人回答了一般定义时,面试官会说每个人都知道……说点不同的。进一步的场景被问到哪一个将被使用并且是有益的以及为什么

因此,请分享对此主题的任何新见解。

提前谢谢...

【问题讨论】:

标签: .net oop interface abstract-class


【解决方案1】:

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

我喜欢这样看待它,抽象类是其他类的基础。它不仅指定特定系列事物必须具有的操作,还指定这些操作完成工作所需的数据。特定的孩子可以添加(如果需要,甚至可以忽略)特定的数据元素。另一方面,界面是一种合同——它没有说明你将如何做某事,只说明你必须做什么以及你将让外界看到什么。您的内部运作是您自己在界面中的业务。

【讨论】:

  • 你能分享一些场景吗?
【解决方案2】:

抽象类可以为其方法提供实现,而接口则严格提供契约(对象必须实现哪些方法)。

在您想为继承者提供基本实现但又不想直接创建类的实例的情况下,抽象类很有用。例如,想想汽车。您不会想要创建通用汽车,但每个护理都可以共享一些基本功能集:

public abstract class Car
{
    public InternalCombustionEngine Engine { get; private set; }

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

    public abstract void Drive();
}

当您有一些类之间可能不直接相关时,接口很有用,但您希望以相同的方式处理,因为每个类都有相似的功能集。

【讨论】:

  • 很明显:接口有点像抽象类,区别大体上是,你不能为接口函数指定原型,而一个类可以实现多个接口。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 2010-12-27
    • 2011-04-07
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2010-11-13
    • 2013-02-17
    相关资源
    最近更新 更多