文档章节

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();
    }
}

 

© 著作权归作者所有

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

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

亭子happy
06/06
0
0
【java8】java新特性(二)——lambda表达式

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

kisscatforever
03/20
0
0
Java8 - lambda 表达式

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

秋风醉了
08/29
0
0
java lambda 且行且珍惜

一、先看一个最经典的例子 new Thread(new Runnable() { @Override public void run() { System.out.println("run..."); }}).start(); 这是我们以前多线程的写法,在匿名类里面实现run方法,你...

whaon
2014/04/03
0
0
Java 8 lambda 表达式 示例

Java8中的Lambda表达式取代了匿名类,取消了模板,允许用函数式风格编写代码。这样有时可读性更好,表达更清晰。作为开发人员,我发现学习和掌握lambda表达式的最佳方法就是勇于尝试,尽可能...

阿刚ABC
10/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux学习-1031(rsync同步工具 上)

10.28 rsync工具介绍 10.29/10.30 rsync常用选项 10.31 rsync通过ssh同步 一、 rsync工具介绍 rsync是一个同步工具,在日常的运维中常会用到。它可以本地同步,也实现可以远程两台机器同步。...

wxy丶
22分钟前
1
0
python实战一期:第一天

1. 为什么学习python 1.1 为什么要学Python? Python第一是个非常牛B的脚本语言,能满足绝大部分自动化运维的需求,又能做后端C/S架构,又能用WEB框架快速开发出高大上的Web界面,只有当你自...

laoba
24分钟前
2
0
Java并发编程学习三:线程同步的关键字以及理解

上篇文章中介绍了Java线程的带来的问题与内存模型中介绍了线程可能会引发的问题以及对应Java的内存模型,顺带介绍了Volatile和Sychronized关键字。今天对Java中涉及到的常见的关键类和关键字...

JerryLin123
31分钟前
0
0
我用代码来给你们分析一个赚钱的技巧

赚钱是个俗气的话题,但又是人人都绕不开的事情。我今天来“科学”地触碰下这个话题。 谈赚钱,就会谈到理财、投资,谈到炒股。有这样一个笑话: 问:如何成为百万富翁? 答:带一千万进入股...

crossin
31分钟前
1
0
spring MatchingBean应用

1、编写接口FactoryList import java.util.List;public interface FactoryList<E extends MatchingBean<K>, K> extends List<E> { E getBean(K factor); List<E> getBeanLi......

重城重楼
44分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部