接口与抽象类的区别
接口与抽象类的区别
总览
特性 | 接口 | 抽象类 |
---|---|---|
方法实现 | 只能包含抽象方法(Java 8 之后支持默认方法和静态方法) | 可以包含抽象方法和具体方法 |
成员变量 | 只能包含常量(默认 public static final ) |
可以包含实例变量、静态变量和常量 |
多重继承 | 一个类可以实现多个接口 | 一个类只能继承一个抽象类 |
访问修饰符 | 方法默认是 public |
方法可以是 public 、protected 或 default |
构造器 | 没有构造器 | 可以有构造器 |
适用场景 | 定义一组不相关类的共同行为 | 定义一组相关类的共同行为和属性 |
实现和继承 | implements |
extends |
版本要求 | Java 8 之前只能包含抽象方法 | 任意版本支持 |
区别
接口使用 interface ,抽象类使用 abstract
一个类可以实现多个接口,但只能继承一个抽象类
接口成员变量一定是public static final,抽象类成员变量没有约束
接口没有构造函数,抽象类可有可无
接口的方法一般是public abstract (Java8 后有default和static),抽象类可以有抽象方法和非抽象方法,修饰符也没有限制;接口的default可以显式定义,抽象类不允许显式定义default
使用场景:接口是like a,是行为规范,抽象类是 is a,是类的抽象
共同点
- 都是多态的实现方式
- 都不能被实例化
- 都可以包含抽象方法
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CautionX!