-6

我正在研究抽象类和接口。

有人可以告诉我完全抽象类和接口之间是否有区别?

4

5 回答 5

3

谷歌是你的朋友,所以使用它。

于 2012-06-13T15:34:30.230 回答
2

肯定是有区别的。我能想到的前几个是

  • 不能继承多个抽象类,可以实现多个接口
  • 您可以为接口编写装饰器,但不能为抽象类编写
  • 您可以在抽象类中提供默认实现,但不能在接口中提供。这允许以向后兼容的方式扩展抽象类,这对于接口是不可能的
于 2012-06-13T15:36:22.427 回答
1

抽象类可以包含方法实现,而接口不能。

于 2012-06-13T15:37:24.240 回答
1

阅读 Java 文档!

抽象类与接口

与接口不同,抽象类可以包含非静态和最终的字段,它们可以包含已实现的方法。这种抽象类类似于接口,只是它们提供了部分实现,将其留给子类来完成实现。如果抽象类仅包含抽象方法声明,则应将其声明为接口。

多个接口可以由类层次结构中任何位置的类实现,无论它们是否以任何方式相互关联。例如,想想 Comparable 或 Cloneable。

相比之下,抽象类最常被子类化以共享实现部分。单个抽象类由具有许多共同点(抽象类的实现部分)但也有一些差异(抽象方法)的相似类子类化。

完全抽象的类和接口之间有区别吗?

如果所有方法都是抽象的,则行为几乎(不完全)相同,但是是有区别的。主要是因为一个类不能从多个(抽象或非抽象)类扩展,但可以实现许多接口。此外,这些字段在接口中也不能是私有的。

请注意,Oracle 文档建议将完全抽象类转换为接口。

于 2012-06-13T15:41:17.333 回答
1

在界面中:

您只能在此接口中声明变量,方法但没有定义

抽象类:当一个类被声明为抽象类时,声明可能包含也可能不包含抽象方法。在抽象类中,我们也可以编写定义。与接口不同,抽象类可以包含非静态和最终的字段。

这种抽象类类似于接口,只是它们提供了部分实现,将其留给子类来完成实现。

于 2012-06-13T15:41:33.157 回答