java default默认,Java 8 之默认方法(Default Methods)

Oracle官网是这样介绍默认方法的,使用默认方法,可以达到往接口里面增加新的功能,而且保持与老版本代码兼容,也就是原来的实现类可以不需要被动修改。所以,默认方法位置是在接口里面;默认方法具有实现,不会强制具体类来现。Java 8要充分利用Lambda,需要增强大量的类库,但是又希望做到兼容性,只能用默认方法这个大招。

默认方法

默认方法与普通的接口方法相比,最前面增加default关键字,参数列表之后接大括号,实现该方法,再后面没有分号。

默认方法的例子

public interface Player {

String getName();

default boolean isMale() {

return true;

}

}

扩展包含默认方法的接口

当一个接口扩展另外一个包含默认方法的接口的时候,有以下3种处理方式。

完全无视默认方法

直接继承了上级接口的默认方法

重新申明默认方法

重新把默认方法申明为抽象方法(无实现,具体子类必需再次实现该方法)

重新实现默认方法

重写了默认方法的实现,依然是一个默认方法。

抽象类实现包含默认方法的接口和上述描述一样。具体类实现包含默认方法的接口的,没有第二条。

接口静态方法

Java 8 接口也可以有静态方法了。静态方法,从职责定位来讲,就是个工具方法。

public interface Player {

String getName();

public static void printContact(Contact contact) {

// TODO print contact for play in the following

}

}

接口与抽象类

记得在什么地方看到过,Java之父说,再给他一次设计Java的机会,Java里就不会有抽象类。面试的时候也有很多时候问接口与抽象类的区别。

总的来说抽象类和接口越来越接近了,是接口向抽象类靠近,剥夺抽象类的生存空间。

默认方法和接口静态方法都是重型武器。

与抽象类相比,接口不能搞定的

抽象类能够定义非 static final 的属性(field)

,而接口不能。接口的属性都是static final的。

抽象类能够定义非public方法,而接口不能。接口的方法都是public的。

与接口相比,抽象类不能搞定的

接口可以多继承(实现),而抽象类不能。抽象类只能单继承。

结语

虽然默认方法在JDK里面主要用于扩展已有类库,不过新的项目默认方法依然很有价值。 曾今的写接口,写抽象类,写具体类这个流程,某些时候可以省去中间的这个步骤。而且接口里面也可以存放一些工具方法了(接口静态方法)。不过,记得接口的方法都是public的,如果想要严格控制访问,那么还得使用抽象类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值