相同点:
接口和抽象类都不能被实例化,他们都位于继承树顶端,用于被其他类继承和实现
接口和抽象类都可以包含抽象方法,实现接口/继承抽象类的普通子类都必须实现这些抽象方法
不同点:
- 接口里只能包含抽象方法,静态方法和默认方法,不能为普通方法提示方法实现,抽象类则完全可以包含普通方法
- 接口中只能定义静态常量,抽象类中既可以定义普通成员变量,也可以定义静态常量
- 接口里不包含构造器,抽象类里可以包含构造器,抽象类中构造器是让其子类调用这些构造器完成属于抽象类的初始化操作
- 接口里不能包含初始化块,但是抽象类则可以包含初始化块
- 一个类最多只能有一个直接父类,包含抽象类,但是一个类可以直接实现多个接口。