当前位置: 首页 > news >正文

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的新特性,这样的感觉会经常出现的。

相关文章:

  • java url xml_从Java中的URL读取XML字符串
  • java 8 关键字_JAVA 8 '::' 关键字
  • java类中静态块_java – 为什么.class不调用类中的静态块?
  • java referrer_JavaScript中document.referrer的用法详解
  • java代码压缩文件_使用Java代码压缩文件或文件夹
  • 石子合并 动态规划 java_动态规划:圆形石子合并问题
  • java修饰方法_Java 修饰符
  • arduino timer频率_Arduino利用TimerOne库产生固定频率和占空比的方波
  • flask数据库mysql增删查改_flask_sqlalchemy简单增删查改操作
  • java基础语法的意义_关于java基础语法的学习笔记
  • java中容器试题_Java最常见208道面试题_容器
  • java 开启线程扫描程序_当多个线程在Java中使用System.in上的扫描仪...
  • java中结构体实现_JAVA中如何实现C中的结构体数组的功能?
  • java nio close_wait_Java NIO 操作总结
  • java zmq订阅_java zmq消息队列
  • 时间复杂度分析经典问题——最大子序列和
  • [NodeJS] 关于Buffer
  • [译]如何构建服务器端web组件,为何要构建?
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Docker容器管理
  • fetch 从初识到应用
  • Java IO学习笔记一
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • leetcode46 Permutation 排列组合
  • React中的“虫洞”——Context
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 大主子表关联的性能优化方法
  • 多线程事务回滚
  • 构建工具 - 收藏集 - 掘金
  • 基于Android乐音识别(2)
  • 如何设计一个微型分布式架构?
  • 想写好前端,先练好内功
  • 在Unity中实现一个简单的消息管理器
  • 最简单的无缝轮播
  • raise 与 raise ... from 的区别
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​ssh免密码登录设置及问题总结
  • # 透过事物看本质的能力怎么培养?
  • #DBA杂记1
  • #Z2294. 打印树的直径
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (33)STM32——485实验笔记
  • (6)添加vue-cookie
  • (C++20) consteval立即函数
  • (floyd+补集) poj 3275
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (六)软件测试分工
  • (排序详解之 堆排序)
  • (三)Honghu Cloud云架构一定时调度平台
  • (推荐)叮当——中文语音对话机器人
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (总结)Linux下的暴力密码在线破解工具Hydra详解