Loading

接口中定义静态方法和默认方法(JDK8)

JAVA8 之前,接口里的方法要求全部是抽象方法。
JAVA8(含 8)之后,以后允许在接口里定义默认方法和静态方法。


JDK8 新特性_默认方法

Java 8 及以上新版本,允许给接口添加一个非抽象的方法实现,只需要使用 default 关键字即可,这个特征又叫做默认方法(也称为扩展方法)。

默认方法和抽象方法的区别是抽象方法必须要被实现,默认方法不是。作为替代方式,接口可以提供默认方法的实现,所有这个接口的实现类都可以得到默认方法。

public class Test {
    public static void main(String[] args) {
        A a = new Test_A();
        a.moren();
    }
}
interface A {
    default void moren() {
        System.out.println("我是接口 A 中的默认方法!");
    }
}
class Test_A implements A {

    @
    Override
    public void moren() {
        System.out.println("Test_A.moren");
    }
}

JDK8 新特性_静态方法

JAVA8 以后,我们也可以在接口中直接定义静态方法的实现。这个静态方法直接从属于接口(接口也是类,一种特殊的类),可以通过接口名调用。

如果子类中定义了相同名字的静态方法,那就是完全不同的方法了,直接从属于子类。可以通过子类名直接调用。

public class Test {
    public static void main(String[] args) {
        A.staticMethod();
        Test_A.staticMethod();
    }
}
interface A {
    public static void staticMethod() {
        System.out.println("A.staticMethod");
    }
}
class Test_A implements A {
    public static void staticMethod() {
        System.out.println("Test_A.staticMethod");
    }
}

静态方法和默认方法

本接口的默认方法中可以调用静态方法。

public class Test {
    public static void main(String[] args) {
        A a = new Test_A();
        a.moren();
    }
}
interface A {
    public static void staticMethod() {
        System.out.println("A.staticMethod");
    }
    public
    default void moren() {
        staticMethod();
        System.out.println("A.moren");
    }
}
class Test_A implements A {
    public static void staticMethod() {
        System.out.println("Test_A.staticMethod");
    }
}
posted @ 2022-11-21 00:11  听风blog  阅读(233)  评论(0编辑  收藏  举报