抽象
在Java继承中,抽象类和普通继承关系中的父类作用基本相同,但是却在一般父类的基础上添加了一些限制:
- 抽象类不能被实例化,即不能被new对象,其子类只有实现了抽象类中的抽象方法才能被实例化;如果抽象类中没有抽象方法,则可以直接实例化
- 抽象类除了包含一般方法,变量,常量,同时自身还包含抽象方法
- 抽象类的子类必须实现抽象类中的所有抽象方法,除非它自己也声明为抽象类,但是这样做,子类则不能被实例化
- 如果一个类中有抽象方法,则这个类必定是抽象类
- 抽象方法和抽象类看上去是多余的,当然实际运用中,抽象类能实现的,我们可以使用一般的继承和接口实现,当然,存在即是有道理的,如果熟练运用的话,可以写更少的代码实现相同的功能
抽象类举例:
接口
从本质上来说,接口是一种特殊的抽象类:
- 接口由常量和抽象方法组成,接口中的抽象方法可以省略abstract书写
- 接口不能被实例化
接口举例:
抽象类和接口比较
相同点:
都不能直接实例化,即不能直接new对象,通过多态性,可由其子类实例化
不同点:
- 抽象类包含一般方法,变量,常量,抽象方法;而接口只能包含常量和抽象方法
- 抽象类可以有构造方法,而接口不能有构造方法
- 一个类可以实现多个接口,但只能继承一个抽象类
- 继承抽象类时会引发单继承所带来的局限性,而通过实现接口的方式能够解决单继承带来的局限性