zoukankan      html  css  js  c++  java
  • 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. 静态方法不能被继承,实现类不能重写接口静态方法,只能使用接口名调用。

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

  • 相关阅读:
    ASP程序调用验证码
    fcex pf.conf
    高速INTERNET代理服务器解决方案
    《IIS 6的几个经典问答》
    一个符合WEB标准的横向下拉菜单
    FREEBSD+PF 在6.2上的架设
    权限
    FreeBSD+IPFILTER实现整网(N个Vlan)透明代理上网
    pf 带宽控制 例子
    FreeBSD下配置DHCP服务小结
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12562219.html
Copyright © 2011-2022 走看看