比如下面这道题:
问:接口里面可以写方法吗? 答: 当然可以啊,默认就是抽象方法。
问:接口里面可以写实现方法吗? 答:不可以,所有方法必须是抽象的。
问:你确定吗? 答:确定……
面试同学看起来对这问题有点怀疑人生,最后还是斩钉截铁的告诉面试官:接口里面只能写抽象方法,不能写实现方法。
问:接口里面是可以写实现方法的,Java 8 开始就可以了,你用过 Java 8 吗? 答:好吧,看来是我学艺不精,Java 8有了解一点,比如那个 Lambda 表达式,但实际项目中也没怎么用。
★ 什么是默认方法和静态方法?
上面也说了,Java 8 开始是可以有方法实现的,可以在接口中添加默认方法和静态方法。
默认方法用 default 修饰,只能用在接口中,静态方法用 static 修饰,并且接口中的默认方法、静态方法可以同时有多个。
在接口中写实现方法一点也不稀奇,像这样的用法,从 Java 8 到 Java 14 已是遍地开花,到处都可以看到接口默认方法和静态方法的身影。
★ 为什么要有接口默认方法?举一个很现实的例子:
我们的接口老早就写好了,后面因为各种业务问题,避免不了要修改接口。
在 Java 8 之前,比如要在一个接口中添加一个抽象方法,那所有的接口实现类都要去实现这个方法,不然就会编译错误,而某些实现类根本就不需要实现这个方法也被迫要写一个空实现,改动会非常大。
所以,接口默认方法就是为了解决这个问题,只要在一个接口添加了一个默认方法,所有的实现类就自动继承,不需要改动任何实现类,也不会影响业务,爽歪歪。
另外,接口默认方法可以被接口实现类重写。
★ 为什么要有接口静态方法?
接口静态方法和默认方法类似,只是接口静态方法不可以被接口实现类重写。
接口静态方法只可以直接通过静态方法所在的 接口名.静态方法名 来调用。
原文链接:t.csdnimg.cn/kwL8C