• Jdk8新特性之接口新增方法


    JDK 8接口增强介绍

    interface 接口名 {
        静态常量;
        抽象方法;
    }

    JDK 8对接口的增强,接口还可以有默认方法和静态方法
    JDK 8的接口:

    interface 接口名 {
       静态常量;
       抽象方法;
       默认方法;
       静态方法;
    }

    接口引入默认方法的背景
    在JDK 8以前接口中只能有抽象方法。存在以下问题:
    如果给接口新增抽象方法,所有实现类都必须重写这个抽象方法。不利于接口的扩展。

    interface A {
        public abstract void test1();
        // 接口新增抽象方法,所有实现类都需要去重写这个方法,非常不利于接口的扩展
        public abstract void test2();
    }
    class B implements A {
        @Override
        public void test1() {
            System.out.println("BB test1");
        }
        // 接口新增抽象方法,所有实现类都需要去重写这个方法
        @Override
        public void test2() {
            System.out.println("BB test2");
        }
    }
    class C implements A {
        @Override
        public void test1() {
            System.out.println("CC test1");
        }
        // 接口新增抽象方法,所有实现类都需要去重写这个方法
        @Override
        public void test2() {
            System.out.println("CC test2");
        }
    }

     以前假如一个接口有很多的抽象方法的时候,可以写一个装饰类

    例如,JDK 8 时在Map接口中增加了 forEach 方法:

     

    接口默认方法的使用
    方式一:实现类直接调用接口默认方法
    方式二:实现类重写接口默认方法

    public class Demo02UseDefaultFunction {
        public static void main(String[] args) {
            BB bb = new BB();
            bb.test01();
    
            CC cc = new CC();
            cc.test01();
        }
    }
    
    interface AA {
        public default void test01() {
            System.out.println("我是接口AA默认方法");
        }
    }
    // 默认方法使用方式一: 实现类可以直接使用
    class BB implements AA {
    }
    
    // 默认方法使用方式二: 实现类可以重写接口默认方法
    class CC implements AA {
        @Override
        public void test01() {
            System.out.println("我是CC类重写的默认方法");
        }
    }

    接口静态方法
    为了方便接口扩展,JDK 8为接口新增了静态方法。

    public class Demo03UseStaticFunction {
        public static void main(String[] args) {
            BBB bbb = new BBB();
            // bbb.test01();
            // 使用接口名.静态方法名();
            AAA.test01();
        }
    }
    
    interface AAA {
        public static void test01() {
            System.out.println("我是接口静态方法");
        }
    }
    
    class BBB implements AAA {
        // @Override
        // public static void test01() {
        //     System.out.println("我是接口静态方法");
        // }
    }

    接口默认方法和静态方法的区别
    1. 默认方法通过实例调用,静态方法通过接口名调用。
    2. 默认方法可以被继承,实现类可以直接使用接口默认方法,也可以重写接口默认方法。
    3. 静态方法不能被继承,实现类不能重写接口静态方法,只能使用接口名调用。

     如果方法要被继承或者重写就用默认方法,如果不需要被继承就使用静态方法

  • 相关阅读:
    3D图片变换
    Javascript编码规范,好的代码从书写规范开始,增强代码的可读性,可维护性,这是相当重要的!
    MVC 项目中又一新方法实现依懒注入 (AutoFac)
    Chrome不支持showModalDialog模态对话框和无法返回returnValue的问题
    Unity 的ICallHander在C#项目中实现注入
    Razor Engine,动态脚本语言,mvc上的语法,适用于文件内容生成,静态网页生成等。
    关于IE中图片不显示的问题(IE兼容问题)
    svn E155004: 'XXX' is already locked
    服务器报错:Swap file "./conf/.server.xml.swp" already exists!
    微信小程序 学习笔记(二)了解他的组成
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12562219.html
Copyright © 2020-2023  润新知