Java8 接口新特征
1. 接口默认方法
java 8 中允许接口中包含具有具体实现的方法,该方法使用default
关键字修饰,称为”默认方法”。
使用示例
定义一个接口:
package com.zhangxiaocai.cn.java8.deft;
public interface MyInterface {
default String getName(){
return "xiaocaiInterface";
}
}
定义一个子类:
package com.zhangxiaocai.cn.java8.deft;
public class SubClass implements MyInterface{
@Override
public String getName() {
return MyInterface.super.getName();
}
}
定义一个测试类:
package com.zhangxiaocai.cn.java8.deft;
public class DefaultInterfaceTest {
public static void main(String[] args) {
SubClass sc = new SubClass();
System.out.println(sc.getName());
}
}
输出结果:
xiaocaiInterface
接口中的静态方法
同名方法调用原则
接口默认方法的”类优先”原则:
若一个接口中定义了一个默认方法,另一个父类或接口中也定义了一个同名方法时:
(1)选择父类中的方法。如果一个父类提供了具体的实现,那么接口中具有相同名称和参数的默认方法会被忽略。
(2)接口冲突。如果父接口提供一个默认方法,另一个接口也提供了一个具有相同名称和参数列表的方法(不管方法是否默认),那么必须覆盖该方法来解决冲突。
如:
定义接口1:
public interface MyInterFace1{
default String getName(){
return "我是接口1";
}
}
定义接口2:
public interface MyInterFace2{
default String getName(){
return "我是接口2";
}
}
定义一个子类:
public class TestMyInf implements MyInterFace1, MyInterFace2{
@Override
public String getName() {
return MyInterFace1.super.getName();
}
}
在定义子类时,必须选择getName()
方法进行覆盖,可以使用MyInterFace1
或MyInterFace2
均可。
2. 接口静态方法
java 8 中接口允许添加静态方法。
如:
package com.zhangxiaocai.cn.java8.deft;
public interface MyInterface {
default String getName(){
return "xiaocaiInterface";
}
public static void show(){
System.out.println("接口中的静态方法");
}
}
调用:
package com.zhangxiaocai.cn.java8.deft;
public class DefaultInterfaceTest {
public static void main(String[] args) {
MyInterface.show();
}
}