详解接口与抽象类的异同点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解接口与抽象类的异同点相关的知识,希望对你有一定的参考价值。

相同之处

  1. 接口和抽象类都不能被实例化,只能被其他类实现和继承
  2. 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类必须实现这些抽象方法
     

不同之处

从设计层面来说

抽象是对类的抽象,是一种模板设计,接口是对行为的抽象,是对行为的规范

从组成上来说

  1. 接口里只能包含抽象方法、静态方法、默认方法和私有方法,不能为普通方法提供方法实现,抽象类则完全可以包含普通方法。
  2. 接口里只能定义公共静态常量,不能定义普通成员变量;抽象类既可以定义普通成员变量也可以定义静态常量。
  3. 接口里不包含构造器;抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。
  4. 接口里不能包含初始化;但抽象类则完全可以包含初始化块

从用法上来说

一个类最多只能有一个父类,包括抽象类;但一个类可以实现多个接口
 

补充

  1. 抽象类是从多个类中抽象出来的模板,接口是更彻底的抽象,接口定义了多个类共同的行为规范,接口实现了规范与实现分离
  2. 一个接口可以有多个父接口,但接口只能继承接口,不能继承类
  3. JDK8 的时候接口可以有默认方法和静态方法功能。
  4. JDK9 在接口中引入了私有方法和私有静态方法。
  5. 私有方法主要作用就是作为工具方法使用,为接口中的类方法和默认方法提供支持。Java8允许在接口中定义带方法体的抽象方法和类方法,当两个默认方法或者类方法中包含一段相同的实现逻辑时,程序必然考虑将这段实现逻辑抽取成工具方法,而工具方法应该是被隐藏的
  6. 默认方法允许在不破坏已使用接口的代码的情况下,在接口中增加新的方法。

以上是关于详解接口与抽象类的异同点的主要内容,如果未能解决你的问题,请参考以下文章

PHP中接口与抽象类的异同点有哪些

java中接口和抽象类的异同点

总结接口与抽象类的异同点

接口与抽象类的异同

抽象类和接口的异同?

抽象类(abstract)和接口(interface)的异同点