抽象类和接口在使用形式上非常相似。
区别 | 抽象类 | 接口 |
1.关键字 | abstract class | interface |
2.组成 | 构造方法、普通方法、抽象方法、static方法、常量、变量 | 抽象方法、全局常量 |
3.子类使用 | class 子类 extends 抽象类 | class 子类 implements 接口1,接口2,...... |
4.关系 | 抽象类可以实现多个接口 | 接口不能继承抽象类,但可以继承多个父接口 |
5.权限 | 可以使用多种权限 | 只能是public |
6.限制 | 单继承局限 | 无单继承局限 |
7.子类 | 抽象类和接口都必须有子类,子类必须要覆写全部的抽象方法 | |
8.实例化对象 | 依靠子类对象的向上转型进行对象的实例化 |
比较发现,抽象类支持的功能绝对比接口多,但其有一个最大的缺点即单继承局限,即:当抽象类和接口都可以使用时,优先考虑接口。
一个不成文的参考(50%):
- 在进行某些公共操作的时候一定要定义出接口;
- 有了接口就需要利用子类完善方法
- 如果是自己写的接口,那就不要用关键字new直接实例化接口子类,而是用工厂模式来获得子类实例