# 抽象类 & 接口
注意:包含抽象方法的类必须声明为抽象类。但是抽象类可以不包含抽象方法。
# 不同点
1. 声明:抽象类用关键字 abstract,接口 interface;
2. 数据域:抽象类对变量没有限制,接口所有变量必须是 public static final
。
3. 方法:抽象类的方法没有限制,接口的方法必须是 public abstract
的实例方法。(从 Java 8 开始,接口方法可以由默认实现,从 Java 9 开始,接口内允许定义私有方法。)
4. 构造方法:抽象类包含构造方法,子类通过构造方法链调用构造方法,接口不包含构造方法。
5. 继承:抽象类是单重继承,用 extends,接口可以被多个类继承,也可以作为子接口继承多个接口,用 implements。
# 相同点
理解了上面的不同点,相同点更好找啦。
- 可以从上面的不同点看出,都不能被实例化。
- 都位于继承顶端,都被实现或继承。
- 都包含抽象方法。(抽象类则可以同时包含抽象和非抽象的方法,接口中所有的方法隐含都是抽象的,public abstrat)
# 理解:
类是对事物的抽象,抽象类是对类的抽象,接口是对抽象类的抽象。
Java 中最基本的单位是类,面向对象提出万物皆对象,OOP 是面向对象的编程思想,OOP 引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。从这一方面去看接口和抽象类:
抽象类:自下而上 -> 先有一堆实现的子类,然后抽象出公共的方法和属性,优化代码结构,省略重复方法。
接 口:自上而下 -> 定义好具体约束,规范子类进行实现;