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();
    }
}



