嘘~ 正在从服务器偷取页面 . . .

Java8 接口新特征


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()方法进行覆盖,可以使用MyInterFace1MyInterFace2均可。

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

}


版权声明: 本博客所有文章除特別声明外,均采用 CC BY-SA 4.0 许可协议。转载请注明来源 Small-Rose / 张小菜 !
评论
  目录