在实际的开发中可以发现抽象类与接口的定义形式非常相似,从JDK1.8开始就特别明显了,在JDK1.8中接口也可以定义default或static方法了,但是这两个依然有明显的定义区别:
1、定义。
抽象类:abstract class 抽象类名称{}
接口类:interface class 接口类名称{}
2、组成。
抽象类:构造方法、普通方法、静态方法、全局常量、成员
接口类:抽象方法、全局常量、普通方法、static
3、权限。
抽象类:可以使用各种权限定义
接口类:只能使用public
4、子类使用。
抽象类:子类通过extends可以继承一个抽象类
接口类:子类使用implements关键字可以实现多个接口类。
5、两者关系。
抽象类:抽象类可以实现若干个接口
接口类:接口不允许继承抽象类,但是允许继承多个父接口
6、使用。
共同点:1)抽象类或接口必须定义子类;
2)子类一定要覆写抽象类或接口中的全部抽象方法;
3)通过子类的向上转型实现抽象类或接口对象实例化
当抽象类和接口都可以使用的情况下优先考虑接口,因为接口可以避免子类的单继承局限。
另外从一个正常的设计角度而言,也需要先从接口来进行项目的整体设计。

image.png