java的抽象与接口类
对比维度 | 抽象类(is what) | 接口(can do) |
---|---|---|
定义方式 | 借助 abstract class 来定义 | 通过 interface 进行定义 |
实现手段 | 利用 extends 关键字实现继承 | 使用 implements 关键字实现接口 |
成员变量 | 可以包含普通变量和常量 | 只能是 public static final 类型的常量 |
方法类型 | 能够有抽象方法,也能有具体实现的方法 | 所有方法默认是 public abstract 的(Java 8 及之后版本允许有默认方法和静态方法) |
多继承支持 | 仅支持单继承(一个类只能继承一个抽象类) | 支持多实现(一个类可实现多个接口) |
设计侧重点 | 强调 “是什么”,用于对一组相关类的共同特征进行抽象 | 着重 “能做什么”,定义了一种行为规范或契约 |
相同点:
1、多是抽象形式,都可以有抽象方法,都不能创建对象。
2、都是派生子类形式:抽象类是被子类继承使用,接口是被实现类实现。
3、一个类继承抽象类,或者实现接口,都必须重写完他们的抽像方法,否则自己要成为抽象类或者报错!
4、都能支持的多态,都能够实现解耦合。
不同点:
1、抽象类中可以定义类的全部普通成员,接口只能定义常量,油象方法(JDK8新增的三种方式)
2、抽象类只能被类单继承,接口可以被类多实现。
3、一个类继承抽象类就不能再继承其他类,一个类实现了接口(还可以继承其他类或者实现其他接口)。
4、抽象类体现模板思想:更利于做父类,实现代码的复用性。
5、接口更适合做功能的解耦合:解耦合性更强更灵活。
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.