Java8:接口里面可以写实现方法吗【可以】 、接口可以多继承吗【可以】

514 阅读2分钟

比如下面这道题:

问:接口里面可以写方法吗? 答: 当然可以啊,默认就是抽象方法。

问:接口里面可以写实现方法吗? 答:不可以,所有方法必须是抽象的。

问:你确定吗? 答:确定……

面试同学看起来对这问题有点怀疑人生,最后还是斩钉截铁的告诉面试官:接口里面只能写抽象方法,不能写实现方法。

问:接口里面是可以写实现方法的,Java 8 开始就可以了,你用过 Java 8 吗? 答:好吧,看来是我学艺不精,Java 8有了解一点,比如那个 Lambda 表达式,但实际项目中也没怎么用。

★ 什么是默认方法和静态方法?

上面也说了,Java 8 开始是可以有方法实现的,可以在接口中添加默认方法和静态方法

默认方法用 default 修饰,只能用在接口中,静态方法用 static 修饰,并且接口中的默认方法、静态方法可以同时有多个

在接口中写实现方法一点也不稀奇,像这样的用法,从 Java 8 到 Java 14 已是遍地开花,到处都可以看到接口默认方法和静态方法的身影。

★ 为什么要有接口默认方法?举一个很现实的例子:

我们的接口老早就写好了,后面因为各种业务问题,避免不了要修改接口。

在 Java 8 之前,比如要在一个接口中添加一个抽象方法,那所有的接口实现类都要去实现这个方法,不然就会编译错误,而某些实现类根本就不需要实现这个方法也被迫要写一个空实现,改动会非常大。

所以,接口默认方法就是为了解决这个问题,只要在一个接口添加了一个默认方法,所有的实现类就自动继承,不需要改动任何实现类,也不会影响业务,爽歪歪。

另外,接口默认方法可以被接口实现类重写

★ 为什么要有接口静态方法?

接口静态方法和默认方法类似,只是接口静态方法不可以被接口实现类重写

接口静态方法只可以直接通过静态方法所在的 接口名.静态方法名 来调用。

原文链接:t.csdnimg.cn/kwL8C