抽象类
抽象类:包含抽象方法的类称为抽象类
抽象方法:该方法没有具体的实现,所以该方法用abstract来修饰
注意的问题:
- 抽象类不可以被实例化(不能被new)
- 抽象类当中,可以有和普通类当中一样的成员,就是不能实例化
- 一个普通类如果继承了抽象类,那么这个类需要重写这个抽象类中的抽象方法
- 一个抽象类A继承了一个抽象类B后,可以不重写B中的抽象方法。但是一个抽象类A被一个普通类继承后,该普通类要重写所有(A和B)的抽象方法。
- 抽象方法不能是private和被final修饰的
抽象类存在的最大意义就是为了被继承。抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法
接口
接口被interface修饰,接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法, 和字段. 而接口中包含的方法都是抽象方法, 字段只能包含静态常量
接口一般都是大写的I开头的
注意:
- 接口当中的方法,没有具体的实现。(方法后面没有{},而是;)
- 接口当中的方法,默认都是public abstract
- 接口当中的成员变量,默认都是public static final
- 接口也是不可以被实例化的
- 一个类可以通过implements实现一个接口,需要重写接口中的方法。(类似继承)
- 一个类可以同时继承(抽象)类并且实现多个接口,但是类只能继承一个
- 接口的出现是为了满足Java中多继承的要求。
- 接口当中,可以有静态方法
从JDK1.8开始接口还可以有默认方法(被default修饰的)
接口之间的继承
用extends实现扩展。该接口会继承上一个接口的功能。用一个类实现该接口时,需要重写这两个接口的方法。
抽象类和接口的对比
| 抽象类 | 接口 | |
| 结构组成 | 普通类+抽象方法 | 抽象方法+全局常量 |
| 权限 | 各种权限 | public |
| 子类使用 | 使用extends关键字继承抽象类 | 使用implements关键字实现接口 |
| 关系 | 一个抽象类可以实现若干接口 | 接口不能继承抽象类,但是接口可以使用extends关键字继承多个父接口 |
| 子类限制 | 一个子类只能继承一个抽象类 | 一个子类可以实现多个接口 |



