Java8 特性-接口的默认方法和静态方法

Java8 特性-接口的默认方法和静态方法

  • Java 8使用两个新概念扩展了接口的含义:默认方法和静态方法。默认方法使得接口有点类似traits,不过要实现的目标不一样。默认方法使得开发者可以在 不破坏二进制兼容性的前提下,往现存接口中添加新的方法,即不强制那些实现了该接口的类也同时实现这个新加的方法。
  • 默认方法和抽象方法之间的区别在于抽象方法需要实现,而默认方法不需要。接口提供的默认方法会被接口的实现类继承或者覆写

接口与实现类

接口

package com.interfaces;

import java.util.function.Supplier;

public interface JieKou {

    //默认方法
     default String sout(){return "接口中的方法";}


    //静态方法
    static JieKou create (Supplier<JieKou> supplier){
        return supplier.get();
    }
}

 

实现类1

package com.impl;

import com.interfaces.JieKou;


public class JieKouDefaultImpl implements JieKou {
    //todo 这里什么也不做
}

实现类2

package com.impl;

import com.interfaces.JieKou;


public class JieKouOverrideImpl implements JieKou {

    @Override
    public String sout() {
        return "被实现类重写的接口!";
    }
}

 

①传统创建对象new对象

  • 两个不同的实现类实现了JieKou接口,其中JieKouOverrideImpl对sout方法重写了,而JieKouDefaultImpl保持默认不变
  • new创建两个实现类对象,java多态返回接口new实现类写法,获得两个实现类,调用sout方法,测试输出结果  
System.out.println("---------------------常规创建实现类--------------------");
        JieKou impl1 = new JieKouOverrideImpl();
        JieKou impl2 = new JieKouDefaultImpl();
        System.out.println(impl1.sout());
        System.out.println(impl2.sout());

结果

②静态方法创建对象

  • 调用接口中静态方法,传递不同对象获取不同对象,均调用sout方法,测试结果
System.out.println("---------------------Lambda 工厂模式创建--------------------");
        JieKou jieKou1 = JieKou.create( JieKouOverrideImpl::new );
        System.out.println(jieKou1.sout());
        JieKou jieKou2 = JieKou.create( JieKouDefaultImpl::new );
        System.out.println(jieKou2.sout());

结果 

  • 由于JVM上的默认方法的实现在字节码层面提供了支持,因此效率非常高。默认方法允许在不打破现有继承体系的基础上改进接口。该特性在官方库中的应用是:给java.util.Collection接口添加新方法,如stream()、parallelStream()、forEach()和removeIf()等等。
  • 尽管默认方法有这么多好处,但在实际开发中应该谨慎使用:在复杂的继承体系中,默认方法可能引起歧义和编译错误。如果你想了解更多细节,可以参考官方文档

chenyb 随笔记录,只为方便自己学习

2019-10-08

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值