文档章节

Java Lambda表达式(三)

兴趣使然的程序员
 兴趣使然的程序员
发布于 2017/02/26 15:19
字数 427
阅读 86
收藏 3

JDK8中提供了“默认方法”,使接口中可以编写带有具体实现的方法,而不是只能编写抽象方法。

例如:

interface InterfaceA{
    //抽象方法,必须在实现类中实现
    void func1();
    //默认方法,可以在接口中写具体实现,当然也可以在实现类中进行重写
    default void func2(){
        System.out.println("Details of func2");
    }
}

class InterfaceAImpl implements InterfaceA{
    @Override
    public void func1() {
        System.out.println("Details of func2");
    }
}

这样的好处是:

如果没有默认方法,我们希望在原来已经编写好的接口中添加方法,就只能添加抽象方法。这样所有这个接口的实现类就都需要修改。使用defaut方法可以避免这一点,实现了和父类普通方法类似的功能

如果实现类实现的其他接口,或者继承的其他类中有同名方法,依据下面的规则执行:

  1. 选择父类中的方法。如果一个父类提供了具体的实现方法,那么接口中编写的默认方法会被忽略。即“类优先”规则。
  2. 重写方法解决冲突。如果是两个接口之间的冲突,需要重写方法来解决冲突。

interface InterfaceA{
    //抽象方法,必须在实现类中实现
    void func1();
    //默认方法,可以在接口中写具体实现
    default void func2(){
        System.out.println("Details of func2");
    }
}
interface  InterfaceB{
    //如果接口2有同名方法,不管是不是default方法,实现类都必须重写该方法
    void func2();
}
class InterfaceAImpl implements InterfaceA,InterfaceB{
    @Override
    public void func1() {
        System.out.println("Details of func2");
    }
    //重写func2
    public void func2() {
        //可以在重写中调用其中一个接口的该方法
        InterfaceA.super.func2();
    }
}

 

© 著作权归作者所有

共有 人打赏支持
兴趣使然的程序员
粉丝 23
博文 112
码字总数 87412
作品 0
深圳
程序员
私信 提问
Lambda 表达式有何用处?如何使用?(针对Java8)

什么是Lambda? 我们知道,对于一个Java变量,我们可以赋给其一个“值”。 如果你想把“一块代码”赋给一个Java变量,应该怎么做呢? 比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的J...

亭子happy
2018/06/06
0
0
02、Java的lambda表达式和JavaScript的箭头函数

[toc] 前言 在JDK8和ES6的语言发展中,在Java的lambda表达式和JavaScript的箭头函数这两者有着千丝万缕的联系;本次试图通过这篇文章弄懂上面的两个“语法糖”。 简介 Lambda 表达式来源于 ...

weir_will
2018/06/14
0
0
【java8】java新特性(二)——lambda表达式

一,前言 在上一篇博客中,小编向大家抛转引玉,简单说明了[ Java8 ](http://blog.csdn.net/kisscatforever/article/details/79572194 ),其实Java 8在2014年3月18日,就发布了。可以说程序...

kisscatforever
2018/03/20
0
0
Java 8 vs. Scala:Part I

比较 Java 8 和 Scala 在使用 Stream API 时的表达方式和性能的差异。 经过漫长的等待,终于等到了有着高阶函数的 Java 8。我迷恋 Java,但是我必须承认和现在一些其它的语言相比 Java 的语法...

oschina
2015/11/13
6K
64
Java8 - lambda 表达式

lambda表达式 为什么需要lambda 表达式 函数对 Java 而言并不重要,在 Java 的世界里,函数无法独立存在。Lambda 表达式为 Java 添加了缺失的函数式编程特点,使我们能将函数当做一等公民看待...

秋风醉了
2018/08/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

rabbitMQ 在spring 的使用

一、准备工作 maven依赖 <dependency>  <groupId>com.rabbitmq</groupId>  <artifactId>amqp-client</artifactId>  <version>4.0.2</version></dependency> <dependency......

狼王黄师傅
昨天
1
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
1
0
大数据教程(11.8)Hive1.2.2简介&初体验

上一篇文章分析了Hive1.2.2的安装,本节博主将分享Hive的体验&Hive服务端和客户端的使用方法。 一、Hive与hadoop直接的关系 Hive利用HDFS存储数据,利用MapReduce查询数据。 二、Hive与传统数...

em_aaron
昨天
3
0
跟我学Spring Cloud(Finchley版)-15-Hystrix监控详解

Hystrix提供了监控Hystrix Command的能力,本节来详细探讨。 监控端点与数据 应用整合Hystrix,同时应用包含spring-boot-starter-actuator 依赖,就会存在一个/actuator/hystrix.stream 端点...

周立_ITMuch
昨天
7
0
day26:shell题

1、 判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。 如果其生产商为AuthenticAMD,就显示其为AMD公司; 如果其生产商为GenuineIntel,就显示其为Intel公司; 否则,...

芬野de博客
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部