我正在研究抽象类和接口。
有人可以告诉我完全抽象类和接口之间是否有区别?
肯定是有区别的。我能想到的前几个是
抽象类可以包含方法实现,而接口不能。
抽象类与接口
与接口不同,抽象类可以包含非静态和最终的字段,它们可以包含已实现的方法。这种抽象类类似于接口,只是它们提供了部分实现,将其留给子类来完成实现。如果抽象类仅包含抽象方法声明,则应将其声明为接口。
多个接口可以由类层次结构中任何位置的类实现,无论它们是否以任何方式相互关联。例如,想想 Comparable 或 Cloneable。
相比之下,抽象类最常被子类化以共享实现部分。单个抽象类由具有许多共同点(抽象类的实现部分)但也有一些差异(抽象方法)的相似类子类化。
完全抽象的类和接口之间有区别吗?
如果所有方法都是抽象的,则行为几乎(不完全)相同,但是是有区别的。主要是因为一个类不能从多个(抽象或非抽象)类扩展,但可以实现许多接口。此外,这些字段在接口中也不能是私有的。
请注意,Oracle 文档建议将完全抽象类转换为接口。
在界面中:
您只能在此接口中声明变量,方法但没有定义
抽象类:当一个类被声明为抽象类时,声明可能包含也可能不包含抽象方法。在抽象类中,我们也可以编写定义。与接口不同,抽象类可以包含非静态和最终的字段。
这种抽象类类似于接口,只是它们提供了部分实现,将其留给子类来完成实现。