抽象类与接口的区别
抽象类 | 接口 | |
---|---|---|
定义关键字 | abstract class 抽象类名称 | interface class 接口名称 |
组成 | 抽象方法 、普通方法、构造方法、静态方法、全局常量、普通常量、成员 | 抽象方法、全局常量 、1.8以后允许使用普通方法和 static 方法 |
权限 | 可以使用各种权限定义 | 只能使用public |
子类使用 | 子类通过extends 关键字继承,一个子类只能继承一个父类 | 使用implements可以实现多个接口 |
两种关系 | 抽象类可以实现若干个接口 | 接口不允许继承抽象类,可以继承多个接口 |
使用 | 1. 抽象类或接口必须定义子类 2子类一定要重写抽象类和接口中的全部抽象方法 3通过子类的向上转型实现接口的实例化 | 同接口类 |
当我们抽象类和接口都可以使用的情况下,优先考虑接口,因为可以避免子类的单继承局限。另外从设计角度而言,也需要从接口来进行总体设计。