Java是典型的面向对象语言,接口和抽象类是Java面向对象设计的两种基础机制。
抽象类:了解抽象类之前,先看一下什么是抽象方法,
抽象方法:只有声明,没有具体实现
抽象方法必须用abstract关键字进行修饰
abstract void example();
所以抽象类是不能被实例化的类,可以有一个或者多个抽象方法,也可以没有抽象方法。
抽象类主要用于抽取相关Java类的共用方法实现或者共同成员变量,然后通过继承的方式达到代码复用的目的。(抽象类不能多继承)
例如:java.util.AbstractList
接口:接口是对行为的抽象,是抽象方法的集合,接口可以达到API定义和实现分离的目的。
另外不能被实例化,不能包含任何非常量成员,任何field都是隐含着public static final 的意义,
同时也没有非静态方法实现,也就是说要么是抽象方法,要么是静态方法。
例如:java.util.List
但是从Java8开始,interface增加了对default method的支持,Java9以后甚至可以定义private default method,Default method提供了一种二进制兼容的扩展已有接口的方法,比如熟悉的java.util.Collection,在Java8中主要是增强Lambda,Stream相关的功能。所以严格来说,Java8以后接口也是有方法可以实现的。