接口和抽象类的主要区别
定义抽象类的关键字是abstract class,而定义接口的关键字是interface。
继承抽象类的关键字是extends,而实现接口的关键字是implements。
继承抽象类支持单继承,而实现接口支持多实现。
抽象类中可以有构造方法,而接口中不可以有构造方法。
抽象类中可以有成员变量,而接口中只有常量。
抽象类中可以有成员方法,而接口中只可以有抽象方法。
抽象类中增加方法时子类可以不用重写,而接口中增加方法时实现类需要重写(java8以前的版本)。
从java8开始增加新特性,接口中允许出现非抽象方法和静态方法,但非抽象方法需要使用default
关键字修饰。
java9开始增加新特性,接口中允许出现私有方法。
案例1:
在接口中新增抽象方法,实现接口的(所有)实现类必须实现新增的抽象方法,但是所有实现类都要
被迫重写。
在java8开始,为了防止这种牵一发而动全身情况发生可以增加非抽象方法,使用default关键字定义。
案例2:
在以上情况下除了接口默认方法可以避免,接口中还可以写静态方法
案例3:
假设需要简化两个相同的默认方法,这时候就可以利用在内部创建一个不允许外部知道的方法简化该方法,
这时候体现我们的大原则(在以后的开发中尽量减少重复的代码,也就是减少代码的冗余!)
从java9开始允许私有方法出现在接口中