zoukankan      html  css  js  c++  java
  • Java8学习笔记(四)--接口增强

    增强点

    静态方法

    public interface InterfacePlus {
        void run();
        static Date createDate(){
            return new Date();
        }
    }
    

    默认方法

    public interface InterfacePlus {
        void run();
        default void sayHello()
        {
            System.out.println("Hello Java8!");
        }
    }
    

    其他

    第一节开篇就说过,Java8采用注解@FunctionalInterface来保证接口为函数接口,即接口中只显式声明一个抽象方法,新增的静态方法和默认方法是否会影响其成为一个函数接口呢,并不会,原因是:静态方法和默认方法均为非抽象方法!
    同理,复写父类的非抽象方法也不影响其成为一个函数接口,如复写equals方法,如下图所示:

    测试

    静态方法测试

    静态方法可以直接用接口来调用。

        Date date = InterfacePlus.createDate();
        System.out.println(date);
    

    默认方法测试

    非抽象的方法实现,只需要使用 default 关键字即可,这个特征又叫做扩展方法。在实现该接口时,该默认扩展方法在子类上可以直接使用,它的使用方式类似于抽象类中非抽象成员方法。

        /*自行实现后可直接调用default方法*/
            //子类实例化
            InterfacePlusImpl interfacePlusImpl = new InterfacePlusImpl();
            interfacePlusImpl.sayHello();
            //Lambda实例化
            InterfacePlus interfacePlus = System.out::println;
            interfacePlus.sayHello();
    

    但扩展方法不能够重载 Object 中的方法。例如:toString、equals、 hashCode 不能在接口中被重载。

    参考

    1. Java 8 新特性概述
  • 相关阅读:
    P3302 [SDOI2013]森林
    P2542 [AHOI2005] 航线规划
    P5795 [THUSC2015]异或运算
    P3320 [SDOI2015]寻宝游戏
    P1963 [NOI2009] 变换序列
    一月练习日志
    计算几何全家桶
    bzoj1076: [SCOI2008]奖励关(期望dp+状压dp)
    bzoj3450 Easy(概率期望dp)
    Eclipse配置 自动补全功能 快捷键 alt+/
  • 原文地址:https://www.cnblogs.com/yw0219/p/7335311.html
Copyright © 2011-2022 走看看