抽象类和接口是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。
抽象类与接口的区别:
抽象类的语法特性:Java中通过abstract关键字定义
- 抽象类不允许被实例化,只能被继承。也就是说,你不能 new 一个抽象类的对象出来。
- 抽象类可以包含属性和方法。方法既可以包含代码实现,也可以不包含代码实现。不包含代码实现的方法叫作抽象方法。
- 子类继承抽象类,必须实现抽象类中的所有抽象方法。
接口的语法特性:Java中通过interface关键字定义
- 接口不能包含属性(也就是成员变量)。
- 接口只能声明方法,方法不能包含代码实现。
- 类实现接口的时候,必须实现接口中声明的所有方法。
设计区别:
- 抽象类是对成员变量和方法的抽象,是一种 is-a 关系,是为了解决代码复用问题。
- 接口仅仅是对方法的抽象,是一种 has-a 关系,表示具有某一组行为特性,是为了解决解耦问题,隔离接口和具体的实现,提高代码的扩展性。