文档章节

java 8 default关键字

 大胖和二胖
发布于 2016/10/12 16:35
字数 596
阅读 607
收藏 0

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

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

public interface RichInterface {
    default void sayHello(){
        System.out.println("Hello");
    }
}

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

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

public class RichImpl implements RichInterface {
    public static void main(String[] args){
        RichImpl ri = new RichImpl();
        ri.sayHello();
    }
}

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

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

public class RichImpl implements RichInterface {
    public static void main(String[] args){
        RichImpl ri = new RichImpl();
        ri.sayHello();
    }

    @Override
    public void sayHello(){
        System.out.println("Hello, I am RichImpl");
    }
}

答案是肯定的。

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

再新建一个interface:

public interface RichInterface1 {
    default void sayByebye(){
        System.out.println("Byebye");
    }
}

同时实现这两个interface:

public class RichImpl implements RichInterface, RichInterface1 {
    public static void main(String[] args){
        RichImpl ri = new RichImpl();
        ri.sayHello();
        ri.sayByebye();
    }
}

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

继续~~~

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

我们修改一下RichInterface1:

public interface RichInterface1 {
    default void sayByebye(){
        System.out.println("Byebye");
    }
    default void sayHello() {
        System.out.println("Hello, Im another RichInterface");
    }
}

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

public class RichImpl implements RichInterface, RichInterface1 {
    public static void main(String[] args){
        RichImpl ri = new RichImpl();
        ri.sayHello();
    }

    @Override
    public void sayHello(){
        System.out.println("Hello I am RichImpl");
    }
}

继续~~~

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

public interface RichInterface {
    default void printContent(String s){
        System.out.println(s);
    }
}
public interface RichInterface1 {
    default void printContent(Double d){
        System.out.println(d);
    }
}
public class RichImpl implements RichInterface, RichInterface1 {
    public static void main(String[] args){
        RichImpl ri = new RichImpl();
        ri.printContent(0.0);
        ri.printContent("0.0");
    }
}

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

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

© 著作权归作者所有

粉丝 23
博文 69
码字总数 50842
作品 0
沈阳
架构师
私信 提问
Java assert 关键字使用

关于Java assert关键字的使用,参考Stack Overflow的高票回答: What are some real life examples to understand the key role of assertions? Assertions (by way of the assert keyword) ......

Acce1erator
2017/10/18
0
0
了解一下Java 8 (一)

2015年公司发展迅速,于是大量的时间花费在招聘上。招聘工程师,必然需要了解候选人的技术能力,尤其是对自己使用的技术的了解程度。优秀的工程师都需要知其然,也知其所以然,否则遇到技术难...

TalkingData
2016/01/20
1K
8
Java学习资料-标识符、关键字

1、标识符 (1)Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符。凡是自己可以起名字的地方都叫标识符,都遵守标识符的规则。 (2)Java标识符命名规则: 标识符由字母、下划...

晓阳
2015/01/05
0
0
Java 基础语法(一) 类、方法、实例变量的概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35619188/article/details/85004955 类、方法、实例变量的概念 对象:对象是类的一个实例,有状态和行为。...

三棵面包树
2018/12/14
0
0
java8简短教程(持续更新含部分9,10,11)

声明:一方面提升下英文水平,一方面重温下java各版本新特性,版权归原作者所有 ,除了翻译也会加自己的东西。水平有限,请理性查阅 Modern Java - A Guide to Java 8 时髦的Java -java 8 参...

小小明童鞋
03/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失

在Spring Cloud中我们用Hystrix来实现断路器,Zuul中默认是用信号量(Hystrix默认是线程)来进行隔离的,我们可以通过配置使用线程方式隔离。 在使用线程隔离的时候,有个问题是必须要解决的...

xiaomin0322
32分钟前
1
0
使用 Jenkins + Ansible 实现 Spring Boot 自动化部署101

本文首发于:Jenkins 中文社区 本文要点: 设计一条 Spring Boot 最基本的流水线:包括构建、制品上传、部署。 使用 Docker 容器运行构建逻辑。 自动化整个实验环境:包括 Jenkins 的配置,J...

Jenkins中文社区
37分钟前
1
0
springcloud配置中心和消息总线,学习,记录其中的问题

改造配置中心的客户端,接入消息总线 1.增加pom文件的引用 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20......

夜中孤影
50分钟前
3
0
gzip压缩

tar -zcvf gz包路径 被压缩的路径 tar -zcvf /home/xxx/test.tar.gz hello gz包的路径可以是 完整的也可以相对 , 被压缩的路径 不要全路径 不然压缩包里也会有全路径...

shzwork
56分钟前
3
0
rancher-1

部署rancher 官方快速部署 https://www.cnrancher.com/quick-start/ 部署命令 mkdir /data/rancher -p# 建立存放rancher数据的目录sudo docker run -d --restart=unless-stopped -v /dat......

以谁为师
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部