记录一下对jdk8后的接口的一些理解

  • 对于jdk8后的接口,接口中加入了可以定义默认方法和静态方法。

为什么要这样设计呢?

  • 是为了在给接口扩展方法的时候,不会影响已经实现了该接口的类
  • 加入默认方法可以解决:在添加方法的同时,不影响现有的实现类

下面演示了一下默认方法和静态方法的使用:


interface A {
    /**
     * jdk8之后接口中可以加入默认、静态方法。
     * 是为了在给接口扩展方法的时候,不会影响已经实现了该接口的类。
     * 加入默认方法可以解决:在给接口添加方法的同时,不影响现有的实现类
     */

    /**
     * jdk1.8前,接口中只能定义抽象方法和全局常量
     * 接口中抽象方法只能是public abstarct修饰,不能是protected修饰
     * 接口中只能定义全局常量
     */
    void testAbatract();

    public static final String s = "a";

    /**
     *  jdk1.8后,接口中加入了默认、静态方法
     * 定义默认方法
     * 接口中的默认方法可以用A.super.默认方法名来调用,或者实现类对象.默认方法名来调用
     */
    default void getA() {
        System.out.println("接口A的默认方法");
    }

    //定义静态方法
    static void getB() {
        System.out.println("接口A的静态方法");
    }
}

class B implements A {
    public static void main(String[] args) {
//        A.super.getA();
        B b = new B();
        //调用子类重写后的父类的默认方法
        b.getA();
        //  直接调用父类接口的静态方法
	//接口中的静态方法只能通过 接口名.静态方法名 来调用
        A.getB();
    }

    @Override
    public void testAbatract() {

    }
    
    public void getA() {
        A.super.getA(); //  子类显式地调用父类的默认方法
    }

}
  • 如果子类实现类该接口,那么子类可以覆盖接口的默认方法,也可以显式地调用父类的默认方法。

  • 在Java中,属性都是public static final修饰的

posted @ 2022-09-11 22:32  pzistart  阅读(73)  评论(0编辑  收藏  举报