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
同时实现 InterfaceA
及InterfaceB
且两个接口都有相同名称的 default 方法。
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 更加拓展了接口的功能,让接口的灵活性更上一层楼。
自我控制是最强者的本能-萧伯纳