2020-08-28

Java抽象类和接口的异同

相同点:
(1)接口和抽象类都不能被实例化,都位于继承树的顶端,用于被其他类实现或继承。
(2)接口和抽象类都可以包含抽象方法,实现接口和继承抽象类的普通子类都必须实现这些抽象方法。

区别:
(1)在抽象类中可以写非抽象的方法,从而避免在子类中重复书写他们,这样可以提高代码的复用性,这是抽象类的优势;接口中只能有抽象的方法。所以接口里不能定义静态方法,而抽象类中可以。(Java8开始,接口可以定义static方法,也可以使用default关键字定义包含默认实现的方法)
(2)一个类只能继承一个直接父类,这个父类可以是具体的类也可是抽象类;但是一个类可以实现多个接口,可以弥补Java单继承的不足。另外一个接口可已继承多个接口。
(3)接口里只能定义静态常量属性,不能定义普通属性;抽象类里二者都可以定义。
(4)接口不能包含构造器和初始化块,抽象类中可以包含。
(5)二者在设计目的上存在较大差异:
a.接口体现的是一种规范和实现分离的思想,充分利用接口,可以极好地降低程序各模块之间的耦合,从而提高系统的可扩展性和可维护性。接口相当于是一种规范,他制订了程序各模块需要遵循的标准,因此系统中的一个接口不应该经常改变,一旦接口改变,对整个系统的影响是辐射型的,导致系统大部分类都需要改写。
b.抽象类则不同,抽象类作为系统中多个子类的父类,它体现的是一种模板式设计。抽象类作为多个子类的父类,可以被认为是一种中间产品,这种中间产品已经实现个部分功能,但是仍不能当成最终产品,需要进一步的完善,这种完善可以有几种不同的实现。

你可能感兴趣的:(2020-08-28)