Java8是由oracle公司于2014年3月正式发布,它是继java5 以来最重要的发布版本。Java8包含了很多新的特性,可以简化开发,提升代码的可读性。

  Java8的一些重要新特性包括:

      l 接口增强

      l 方法引用

      l Lambda表达式

      l Stream

  其中还有一些其他的特性,比如注解的更新,以及一些新的API等。以上四个特性在java8的开发中会比较常用。因为接口增强特性比较独立,而其他三个特性或多或少都有关联关系。这里先记录下接口增强特性的学习笔记。

1.什么是接口增强?

  在java8以前的版本中,定义一个接口时,所有的方法必须是抽象方法,不能有具体实现,这是java语法规定的。但是在java8中定义一个接口时,在满足特定的前提下,可以有方法的具体实现。这样一个接口中可以有属性,可以有抽象方法,也可以有具体的方法,这跟java8以前的接口比,明显接口的功能变得强大了。

2.接口中如何定义具体的方法实现?

  首先,接口中定义具体的方法实现是有限制的,它不能像我们在一个普通类那样随便定义方法实现,它只能定义defaultstatic类型的方法。示例代码如下:

interface MyInterface {
    public void print();

    // default 和 static 方法的出现为了解决实现该接口的子类代码重复的问题
    default void defaultMethod() {
        System.out.println("default method invoked! ");
    }

    default int add(int a, int b){
        return a + b;
    }

    static void staticMethod() {
        System.out.println("static method invoked! ");
    }

    static int multiply(int a, int b){
        return a * b;
    }

    //...
}

  除了关键字修饰,其他跟普通的方法定义并没有什么不同。

3.如何调用

  1)default方法调用

  定义一个类实现该接口,new该类的实例,调用即可。

  2)static方法调用

  类名.方法名() 调用,这跟以前的静态方法调用方式一样。

  示例代码如下:

public class InterfaceTest {
    public static void main(String[] args) {

        MyInterface msg = new InterfaceImpl();
        msg.print();

        msg.defaultMethod(); //调用default方法
        MyInterface.staticMethod(); //调用static方法
    }
}

interface MyInterface {
    public void print();

    // default 和 static 方法的出现为了解决实现该接口的子类代码重复的问题
    default void defaultMethod() {
        System.out.println("default method invoked! ");
    }

    default int add(int a, int b){
        return a + b;
    }

    static void staticMethod() {
        System.out.println("static method invoked! ");
    }

    static int multiply(int a, int b){
        return a * b;
    }

    //...
}

4. 应用场景

  想象这样一中情况,当多个类实现一个接口的某个方法时,方法的具体实现代码相同,这样就会造成代码重复问题。接口增强就相当于把公共的代码抽离出来,放入接口定义中,这样实现类对于该方法就不用重新定义,直接调用即可,这很好的解决了实现该接口的子类代码重复的问题。

java8之接口增强的更多相关文章

  1. Java8 函数式接口-Functional Interface

    目录 函数式接口: JDK 8之前已有的函数式接口: 新定义的函数式接口: 函数式接口中可以额外定义多个Object的public方法一样抽象方法: 声明异常: 静态方法: 默认方法 泛型及继承关系 ...

  2. Java8函数接口实现回调及Groovy闭包的代码示例

    本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场景: 主体流程是不变的,变的只是其中要调用的具体方法. 其特征是:   Begi ...

  3. java8 函数式接口——Function/Predict/Supplier/Consumer

    Function 我们知道Java8的最大特性就是函数式接口.所有标注了@FunctionalInterface注解的接口都是函数式接口,具体来说,所有标注了该注解的接口都将能用在lambda表达式上 ...

  4. java8中接口default、static新特性,与抽象类区别

    之前Java接口中的方法默认都是public abstract,成员变量默认都是public static final,偶然发现接口中可以有default类型的方法,才知道java8中接口可以有自己的 ...

  5. Java8学习笔记(四)--接口增强

    增强点 静态方法 public interface InterfacePlus { void run(); static Date createDate(){ return new Date(); } ...

  6. java8的接口新特性(可以有方法体的接口)(转)

    以前Java的接口中定义的方法不可以有方法体,这样试用起来,有时候听不方便的,当有多个类实现了想同的接口,接口中某一些方法的实现体可能都是一样的时候,这样无疑浪费了很多时间,在写重复的代码(或者说co ...

  7. JAVA8函数式接口

    java8 中内置的四大核心函数接口** Consumer<T> :消费型接口* void accept(T t)* Supplier<T> :供给型接口* T get()** ...

  8. Java8函数式接口和Lambda表达式

    两者关系: Lambda表达式就是函数式接口(FunctionalInterface)实现的快捷方式,它相当于函数式接口实现的实例,因为在方法中可以使用Object作为参数,所以把Lambda表达式作 ...

  9. 一文带你认识Java8中接口的默认方法

    Java8是Oracle于2014年3月发布的一个重要版本,其API在现存的接口上引入了非常多的新方法. 例如,Java8的List接口新增了sort方法.在Java8之前,则每个实现了List接口的 ...

随机推荐

  1. c# 九九乘法表

    static void Main(string[] args) { ; i < ; i++) { ; s <= i; s++) { Console.Write(s + "*&qu ...

  2. 谷歌chrome浏览器www.tradeadexchange.com广告弹窗跳转劫持病毒

    近期大量网友出现chrome浏览器被劫持的情况,表现如下:           ·  点击(访问)任意网站任意链接均有概率弹出www.tradeadexchange.com.           ·  ...

  3. C语言链表实现约瑟夫环问题

    需求表达:略 分析: 实现: #include<stdio.h> #include<stdlib.h> typedef struct node { int payload ; ...

  4. weinre targets none 的问题

    安装了weinre之后,target 老是是none.问题就是处在localhost或者127.0.0.1. 因为手机或者虚拟机要通讯,相当于另外一台电脑,用localhost怎么能实现通讯嘛.得用本 ...

  5. excel表里的数据导入到数据库里

    采用的是jxl,所以需要导jxl-2.4.2.jar的jar包.(前提知道excel表的目录): //用log记录异常信息 private static final Logger log = Logg ...

  6. #linux包之psmisc之fuser命令

    概述 [root@localhost ~]# rpm -qf /sbin/fuserpsmisc-22.6-15.el6_0.1.x86_64 先说 fuser的作用,fuser能识别出正在对某个文件 ...

  7. macOS 上编译 Dynamips

    Dynamips 是一个Cisco 路由器模拟软件. 安装过程: git clone git://github.com/GNS3/dynamips.git cd dynamips mkdir buil ...

  8. WMI tester

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. rsync 文件同步(差异复制)

    Rsync 是一种快速且极其通用的文件复制工具.以其 Delta 传输算法,通过仅发送源文件和目标中现有文件之间的差异来减少通过网络发送的数据量 Rsync 的几种复制方式:Local,SSH 和 R ...

  10. TCP/IP协议三次握手和四次挥手大白话解说

    前言 昨天晚上被一位师傅问到了TCP/IP的工作机制,心里很清楚三次握手,然而对于四次挥手却忘了,这是大学习里学过的,奋而翻阅书籍和网络对之前所学的做一个温顾,算是夯实自我吧. TCP(Transmi ...