1、什么是默认方法?
1.Java 8 的新特性
2.默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。
3.我们只需在方法名前面加个 default 关键字即可实现默认方法。
4.只能用在接口中
5.默认方法优于抽象方法
2、为什么需要默认方法?
1.举一个很现实的例子:
我们的接口老早就写好了,后面因为各种业务问题,避免不了要修改接口。
在 Java 8 之前,比如要在一个接口中添加一个抽象方法,那所有的接口实现类都要去实现这个方法,不然就会编译错误,而某些实现类根本就不需要实现这个方法也被迫要写一个空实现,改动会非常大。
所以,接口默认方法就是为了解决这个问题,只要在一个接口添加了一个默认方法,所有的实现类就自动继承,不需要改动任何实现类,也不会影响业务。
另外,接口默认方法可以被接口实现类重写。
扩展:静态方法
1.因为接口默认方法可以被继承并重写,如果一个类实现(或一个接口继承)的多个接口都存在相同的默认方法,那就存在冲突问题。
【冲突的结局方案】
解决接口default方法冲突的三步骤:
i.方法签名相同时,才表示出现了冲突。
ii.类中的方法优先级最高。类或者父类中的方法实现优先级大于任何接口的默认方法
iii.其实,子接口的默认方法优先级更高。
iv.若最终还是无法判断,那么实现类必须通过显示复写的方式复写默认方法,然后再自己通过xxx.super.xxx()的方式来指定具体使用哪个接口的实现
2.静态方法用 static 修饰
3.静态方法可以节省内存
4.在接口内的静态方法是不可以被重写的