天天看点

Java 接口的默认方法【扩展静态方法,接口默认方法多继承的解决方案】

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.在接口内的静态方法是不可以被重写的