java def_java 8 default关键字

java 8当中引入了一些新的特性,最近我们会陆续介绍这些特性,从default开始。

一直以来,我们有一个认识,interface当中是不能有方法实现的,但是从java 8开始,这个事变了,因为有了default这个关键字。直接来看一下代码:

public interfaceRichInterface {

default voidsayHello(){

System.out.println("Hello");

}

}

我们声明了一个RichInterface接口,在其中定义了一个sayHello方法,这个方法是有具体实现的。

然后,我们实现这个接口:

public classRichImpl implementsRichInterface {

public static voidmain(String[] args){

RichImpl ri = newRichImpl();

ri.sayHello();

}

}

我们不需要实现sayHello方法,而且可以直接使用它。

那么下一个问题,我可不可以override这个方法。

public classRichImpl implementsRichInterface {

public static voidmain(String[] args){

RichImpl ri = newRichImpl();

ri.sayHello();

}

@Overridepublic voidsayHello(){

System.out.println("Hello, I am RichImpl");

}

}

答案是肯定的。

继续下一个问题,java是不允许多重继承的,但是有了default这个关键字,貌似我们可以通过它来实现类似的多重继承。

再新建一个interface:

public interfaceRichInterface1 {

default voidsayByebye(){

System.out.println("Byebye");

}

}

同时实现这两个interface:

public classRichImpl implementsRichInterface, RichInterface1 {

public static voidmain(String[] args){

RichImpl ri = newRichImpl();

ri.sayHello();

ri.sayByebye();

}

}

很好,一切都跟我们想的一样。

继续~~~

如果2个interface有相同的default方法怎么办?

我们修改一下RichInterface1:

public interfaceRichInterface1 {

default voidsayByebye(){

System.out.println("Byebye");

}

default voidsayHello() {

System.out.println("Hello, Im another RichInterface");

}

}

这个时候,RichImpl一定会报错对不对(鬼知道我该用哪一个?),那么应该怎么办呢?没错,override一下就好了:

public classRichImpl implementsRichInterface, RichInterface1 {

public static voidmain(String[] args){

RichImpl ri = newRichImpl();

ri.sayHello();

}

@Overridepublic voidsayHello(){

System.out.println("Hello I am RichImpl");

}

}

继续~~~

我们可不可以在2个interface当中实现overload的效果,猜测是可以的,上代码:

public interfaceRichInterface {

default voidprintContent(String s){

System.out.println(s);

}

}

public interfaceRichInterface1 {

default voidprintContent(Double d){

System.out.println(d);

}

}

public classRichImpl implementsRichInterface, RichInterface1 {

public static voidmain(String[] args){

RichImpl ri = newRichImpl();

ri.printContent(0.0);

ri.printContent("0.0");

}

}

很好,一切都和我们的预想一样。

基本上,default的内容就这么多了,如果大家对scala有一定了解,或者读过我之前的scala基础的文章,会感觉,这个东西其实跟scala当中的trait有点像了,没错,而且,随着你越来越多的了解java 8的新特性,这样的感觉会经常出现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值