一、什么是抽象类
抽象类是更高层次的抽象,抽象类和抽象方法都需要使用abstract关键字修饰,类中方法是用来描述类的行为的,但有时候我们只有在运行期间才能确定确切的描述方式,这时候就需要用到抽象类。有抽象方法的类只能定义成抽象类,抽象类中可以没有抽象方法。
抽象方法和抽象类的规则如下:
- 抽象类和抽象方法必须使用abstract关键字修饰,抽象方法不能有方法体
- 抽象类不能实例化.只能用来继承
- 抽象类的构造函数不是用来实例化的,而是子类调用来初始化抽象类的
- 含有抽象方法的类只能被定义成抽象类
二、什么是接口
接口是一种规范,接口规定了必须向外提供哪些服务
三、两者相同之处
- 接口和抽象类都不可被实例化
- 接口和抽象类中都可包含抽象方法,实现接口或继承抽象类的子类必须实现抽象方法
四、两者不同之处
- 接口是一种规范,接口规定了实现者必须向外提供哪些服务
- 接口不能经常改变,否则会影响整个系统
- 接口中只能包含抽象方法和默认方法,而抽象类中可以包含普通方法
- 接口中不能定义静态方法,抽象类中可以定义静态方法
- 接口中只能定义静态常量,不可以定义普通成员变量,抽象类中可以定义静态常量也可以定义普通成员变量
- 接口中不能包含构造器,抽象类中包含构造器,该构造器并不是实例化抽象类,而是让子类调用构造器完成抽象类的初始化
- 接口中不能包含初始化块,抽象类可以包含初始化块
- 一个类只可以有一个直接父类,但是可以实现多个接口
五、总结
接口是一种规范,抽象类是一种更高层次的抽象。抽象类中可以包括普通类实现,接口中不能包括普通类实现。