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

牧云@^-^@ 提交于 2020-03-26 10:17:27

相同之处

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

不同之处

从设计层面来说

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

从组成上来说

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

从用法上来说

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

补充

  1. 抽象类是从多个类中抽象出来的模板,接口是更彻底的抽象,接口定义了多个类共同的行为规范,接口实现了规范与实现分离
  2. 一个接口可以有多个父接口,但接口只能继承接口,不能继承类
  3. JDK8 的时候接口可以有默认方法和静态方法功能。
  4. JDK9 在接口中引入了私有方法和私有静态方法。
  5. 私有方法主要作用就是作为工具方法使用,为接口中的类方法和默认方法提供支持。Java8允许在接口中定义带方法体的抽象方法和类方法,当两个默认方法或者类方法中包含一段相同的实现逻辑时,程序必然考虑将这段实现逻辑抽取成工具方法,而工具方法应该是被隐藏的
  6. 默认方法允许在不破坏已使用接口的代码的情况下,在接口中增加新的方法。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!