首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >接口与抽象与继承

接口与抽象与继承
EN

Stack Overflow用户
提问于 2015-07-25 18:55:13
回答 3查看 6.5K关注 0票数 2

我已经看过了接口、抽象类和继承的用法。我看到每个人都有自己的用途,但是,我还是有点困惑。

我知道一个类通常只能扩展另一个类,尽管有些类可能支持多重继承,但它可以实现多个接口(这可能是使用接口的主要原因)。然而,如果我是正确的,这个类也可以由另一个类扩展。我还看到抽象类可能比接口更快,并且可以具有非静态的最终变量。

所以,我仍然不知道什么时候用哪一种更好。也许通过列举一些例子,可以更好地理解这一点。我不反对使用任何东西,但我认为有些东西我看不见。进一步的解释也可能有帮助。提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-25 19:02:53

如果要使用与基类相同的代码并使用额外的功能对基类进行扩展,则从基类继承是非常有用的。

虚拟和抽象都与此相关。您可以使用基本实现创建一个虚拟方法。子类可以(可选)更改或添加到此实现中。抽象类本身就是一个不完整的基类。声明了一个抽象方法,但还没有实现。子类必须提供实现。如果基类实现一个流,但是该流的一部分需要由另一个类实现,这是非常有用的。基类需要能够调用该部分,这就是声明抽象方法的地方。

接口是另一回事。接口是关于类中存在哪些方法的契约,但它们可以由两个完全无关的类实现。这很方便,因为您可以为小块功能创建小接口。例如,可以保存的东西可以实现ISavable,这只是强制了方法'Save‘的存在。两个完全不同的类可以实现这一点,例如,允许保存所有功能,只保存可以保存的所有内容。

多重继承是一种特定的语言特性,在许多语言中是不可用的,尽管在许多语言中,通过使用接口和委托设计模式可以产生类似的效果。

票数 6
EN

Stack Overflow用户

发布于 2015-07-25 18:59:57

这取决于你自己的风格。

事实上,继承自抽象类的类必须使用抽象类的所有属性和方法--几乎不可能创建具有多个继承级别的干净体系结构。

接口的主要优点是灵活性--您可以实现其中的大部分,但不必更改类的内部结构来实现它们。

在大多数情况下,使用接口是最佳实践,但在一些软件模式(如组合模式或策略模式)除外。

但最后,这是你的决定-你必须选择你想要的继承类型在你的项目。

接口帮助您获得灵活性,抽象类为您的体系结构带来了更多的凝聚力,因为它们将相似的类组合在一起。->您可以在其子类中重用抽象类的代码

票数 0
EN

Stack Overflow用户

发布于 2015-07-25 19:07:59

通常,当您想要指定类应该做什么来工作时使用接口,而不是它应该如何工作。例如,排序函数可能只在实现某种Comparable接口的类的对象数组上工作,这些对象接口要求它实现比较操作符,但它并不关心这种比较是如何工作的。

另一方面,抽象类将包含一些实际代码。Comparable抽象类可能使用比较运算符实现各种算法,但除非您在子类中实际实现该运算符,否则它还没有准备好实例化。

一个类不能扩展多个超类,因为所谓的钻石问题(以及相似的事物)。但是,接口不带任何代码,所以这不是问题,您可以在单个类中实现多个接口。

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

https://stackoverflow.com/questions/31630026

复制
相关文章

相似问题

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