Interface 中 的 default 方法、static方法

Interface 中 的 default 方法、static方法

偶然间看到 interface 接口中有 default、static 关键字修饰的方法。

来源

在 JDK1.8 时,接口中添加了 default 关键字和 static 关键字修饰的方法。defalut 修饰的方法标注为普通方法,子类无需进行实现。

static 修饰的方法标注为静态用法,跟平常的静态用法一样

1、default 基本用法

1.1 当只有一个接口,实现类无需重写 default 方法

接口 InterfaceA有 default 方法

public interface InterfaceA {
    public default String getName() {
        return "名字为:InterfaceA";
    }
}

DefaultTest 实现 InterfaceA

public class DefaultTest implements InterfaceA {
}

可以注意到没有实现类没有重写 getName() 方法。

进行测试,可以直接调用InterfaceA 的 default 方法

public static void main(String[] args) {
    DefaultTest test = new DefaultTest();
    System.out.println(test.getName());
}

输出结果:

名字为:InterfaceA

1.2 当多个接口拥有相同名称 default 方法, 实现类必须重写 default 方法

现在 类DefaultTest同时实现 InterfaceAInterfaceB且两个接口都有相同名称的 default 方法。

image-20210222114802168

1.3 当继承的父类与实现的接口拥有相同名称的方法(接口中 default 修饰),调用的是父类的方法。

DefaultTest继承于ParentTest,实现InterfaceA,但ParentTest同样有getName()方法。

public class ParentTest {
    public String getName() {
        return "名字为:ParentTest";
    }
}

DefaultTest如下:

public class DefaultTest extends ParentTest implements InterfaceA {
}

进行测试:

public static void main(String[] args) {
    DefaultTest test = new DefaultTest();
    System.out.println(test.getName());
}

根据输出结果可以知道,调用的是父类的方法

名字为:ParentTest

2、static 基本用法

在接口中,static 关键字修饰的方法为静态方法,与其他静态方法的应用并没有差别

public interface InterfaceA {
    static String getName() {
        return "名字为:InterfaceA";
    }
}

通过接口名.方法名()直接调用

public static void main(String[] args) {
    DefaultTest test = new DefaultTest();
    System.out.println(InterfaceA.getName());
}

default 与 static 更加拓展了接口的功能,让接口的灵活性更上一层楼。

参考博客:https://blog.csdn.net/wf13265/article/details/79363522

自我控制是最强者的本能-萧伯纳
原文地址:https://www.cnblogs.com/CF1314/p/14431931.html