接口VS抽象和继承(Interface vs Abstract and Inheritance)

2019-10-24 04:33发布

我已经看过在接口,抽象类和继承的使用。 我看到,各有各的用途,但,我仍然有种困惑。

我知道,通常一个类只能扩展另一个类,虽然有些人可能支持多重继承,但可以实现多个接口(这可能是一种使用接口的主要原因)。 但是这个类也可以通过其他类如果我是正确的扩展。 我也看到,抽象类是不是接口速度更快,可以有非静态最终变量。

所以,我现在还不能确定什么时候是它更好地使用它。 也许通过给一些例子这可以更好地理解。 我不反对使用任何,但我觉得有东西,我没有看到。 进一步的解释可能会有所帮助。 提前致谢。

Answer 1:

从基类继承,如果你想使用相同的代码基类,并有额外的功能扩展它是有用的。

Vitual和抽象都与此有关。 你可以用一个基实现一个虚拟的方法。 子类可以(可选)更改或添加此实现。 抽象类是一个基类,这本身就是不完整的。 一个抽象方法声明,但一直没有实现呢。 子类必须提供一个实现。 如果基类实现的流动,但需要由另一个类来实现该流的一部分,这是有用的。 基类需要能够调用该部分,这是在声明一个抽象方法进入视野。

接口是一个不同的故事。 一个接口是一个关于其在类方法存在一个合同,但它们可以通过两个完全不相关的类来实现。 这是非常方便的,因为你可以让小接口,用于小件的功能。 例如,一些可以节省可以实现ISavable,刚刚强制执行法“保存”的存在。 两个完全不同的类可以实现这一点,允许实例的全部保存功能只保存可以保存一切。

多重继承是特定语言的功能,是不是在许多语言版本,虽然在许多语言中,你可以通过使用接口和委托设计模式类似的效果。



Answer 2:

这取决于你自己的风格。

事实上,从一个抽象类继承的类必须使用所有属性和它的方法 - 它几乎是不可能创造一个干净的架构,继承的很多层面。

接口的主要优点是灵活性 - 可以实现很多人,但没有改变你的类的内部结构,以实现它们。

在大多数情况下,它是使用接口,除了一些软件模式,如compositum或策略模式的最佳实践。

但它到底是你的决定 - 你要选择你的项目,你要继承的类型。

接口帮助您获得的灵活性,抽象类带来更多的凝聚力,以你的架构,因为他们班集体类似于在一起。 - >您可以重用的抽象类的代码在它的子类



Answer 3:

一般情况下,使用接口时,你需要指定哪些类是应该做的工作,但它不应该怎样做。 例如,排序功能可能只能在类的对象实现某种阵列工作Comparable接口,只需要它来实现比较操作,但是它并不关心这种比较究竟是如何工作的。

抽象类,在另一方面,将包括一些实际的代码Comparable抽象类可能实现使用比较运算不同的算法,但还没有准备好被实例化,除非你实际上是在子类中实现这样的操作。

一个类不能扩展多个superclassess,因为所谓的钻石问题(similiar的东西)。 接口方面,但是,不会携带任何代码,所以这不是一个问题,可以实现单类多个接口。



文章来源: Interface vs Abstract and Inheritance