【发布时间】:2011-04-04 20:32:27
【问题描述】:
在最近的采访趋势中,我注意到这个问题每次都会出现。但是当一个人回答了一般定义时,面试官会说每个人都知道……说点不同的。进一步的场景被问到哪一个将被使用并且是有益的以及为什么
因此,请分享对此主题的任何新见解。
提前谢谢...
【问题讨论】:
标签: .net oop interface abstract-class
在最近的采访趋势中,我注意到这个问题每次都会出现。但是当一个人回答了一般定义时,面试官会说每个人都知道……说点不同的。进一步的场景被问到哪一个将被使用并且是有益的以及为什么
因此,请分享对此主题的任何新见解。
提前谢谢...
【问题讨论】:
标签: .net oop interface abstract-class
抽象类可以定义方法的基本实现以及受保护或私有的数据成员,而接口仅定义类必须与公共数据成员一起提供的功能。
我喜欢这样看待它,抽象类是其他类的基础。它不仅指定特定系列事物必须具有的操作,还指定这些操作完成工作所需的数据。特定的孩子可以添加(如果需要,甚至可以忽略)特定的数据元素。另一方面,界面是一种合同——它没有说明你将如何做某事,只说明你必须做什么以及你将让外界看到什么。您的内部运作是您自己在界面中的业务。
【讨论】:
抽象类可以为其方法提供实现,而接口则严格提供契约(对象必须实现哪些方法)。
在您想为继承者提供基本实现但又不想直接创建类的实例的情况下,抽象类很有用。例如,想想汽车。您不会想要创建通用汽车,但每个护理都可以共享一些基本功能集:
public abstract class Car
{
public InternalCombustionEngine Engine { get; private set; }
public virtual void Start()
{
Engine.Start();
}
public abstract void Drive();
}
当您有一些类之间可能不直接相关时,接口很有用,但您希望以相同的方式处理,因为每个类都有相似的功能集。
【讨论】:
除了其他人所说的之外,我将接口视为跨类常见但不属于 is-a 关系的行为关系。它是一种表达常见行为的方式,而不是 is-a 关系的继承。我相信这就是为什么有些调用接口是穷人的多重继承。
【讨论】: