纯抽象类和接口

use*_*924 15 java

任何人都可以告诉我完全抽象的类和接口之间究竟有什么区别?

Abstract类也可以将其所有方法都抽象化.接口的所有方法都是抽象的.在这种情况下,两者之间的主要区别是什么?

如果纯抽象类和接口之间有区别?界面有什么用?在使用接口的地方,我们可以使用纯抽象类?

Dam*_*ien 15

要完成以前的答案:

界面是"合同".如果类实现了接口,则必须提出接口中列出的所有服务.

抽象类是骨架.它定义了扩展类的某种方式,同时让它们有一些自由空间(抽象方法)是唯一的.

一个纯粹的抽象类与接口做同样的事情,但是有一个独特的扩展问题,对我来说,它没有兴趣

  • 纯抽象类具有唯一扩展的问题,但可以定义除公共之外的其他可访问性. (2认同)

sat*_*esh 10

每个接口都是隐式抽象的:接口体中的每个方法声明都是隐式抽象和公共的.

抽象类具有可以包含实现的方法.抽象方法可以是公共的,受保护的或默认访问(包可见).与接口不同,抽象类可以包含非静态和最终的字段.

另请参阅:
Interfaces vs Abstract类Java教程


cat*_*alk 5

在Java和C#中,可以使用多个接口派生,并且只能从一个类继承,


swi*_*ang 5

选择纯抽象而不是接口的原因之一是强制子类实现由超类实现的特定方法。

例如(在 Java 中),

假设您希望所有扩展类都实现 toString()、equals() 和 hashCode()。

您可以为该合约创建一个名为 ForceSomeMethods 的接口,但这些方法是由 Object 隐式实现的。

将 ForceSomeMethods 设为纯抽象类,并使用 toString() 等作为抽象方法,所有子类将被迫实现这些方法。