比较java中的抽象类和接口

时间:2012-06-13 15:33:51

标签: java

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

有人能告诉我完全抽象的类和接口之间是否存在差异?

5 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

肯定存在差异。我能想到的前几个是

  • 您不能继承多个抽象类,您可以在其中实现多个接口
  • 您可以为界面编写装饰器,但不能为抽象类编写
  • 您可以在抽象类中提供默认实现,但不能在接口中提供。这允许以向后兼容的方式扩展抽象类,这对于接口
  • 是不可能的

答案 2 :(得分:1)

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

答案 3 :(得分:1)

READ THE JAVA DOCUMENTATION!

  

抽象类与接口

     

与接口不同,抽象类可以包含非静态和最终的字段,并且它们可以包含已实现的方法。这些抽象类与接口类似,不同之处在于它们提供部分实现,将其留给子类来完成实现。如果抽象类只包含抽象方法声明,那么应该声明为接口。

     

可以通过类层次结构中的任何位置实现多个接口,无论它们是否以任何方式彼此相关。例如,可以考虑可比较或可克隆。

     

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

  

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

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

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

答案 4 :(得分:1)

在界面中:

你只能声明变量,方法但没有在这个接口中写入定义

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

此类抽象类与接口类似,不同之处在于它们提供部分实现,将其留给子类来完成实现。