接口和抽象类的区别
相同点:
1. 都位于继承的顶端,用于被其他实现或继承。
2. 都不能被实例化。
3. 都可以定义抽象方法,其子类/实现类都必须覆写这些抽象方法。
不同:
1. 接口没有构造方法,抽象类有构造方法。
2. 抽象类可包含普通方法和抽象方法,接口只能包含抽象方法(java8之前)。
3. 一个类只能继承一个直接父类(可能是抽象类),接口是多继承的并且只支持一个类实现多个接口。
4. 变量:接口里默认是pubic static final,抽象类是默认包权限。
5. 方法:接口里默认是public abstract,抽象类默认是默认包访问权限。
6. 内部类:接口里默认是public static,抽象类默认是默认包访问权限。
如果接口和实现类都可以完成的功能,尽量使用接口,面向接口编程。