Java8的新特性——接口中的默认方法和静态方法

        大家都知道接口是用来对代码进行一种规范,对代码进行一种规范,实际开发中大多是协作开发,所以这就需要一种规范,大家都按照这种规范对代码进行书写,那么就会在整合的时候,非常的轻松了。

       然而,有些时候会出现一个问题就是:当有多个类实现了相同的接口,接口中的某一些方法的实现体可能都是一样的时候,这样无疑浪费了很多时间,在写重复的代码,或者说copy。

      应对于这种情况,Java8在接口中为我们新增了default和static方法,这两种方法可以有方法体。

/*定义一个接口*/
public interface Compute {
    
    int sub(int x,int y);

    default void ComputeDefault(){
        System.out.println("Compute的default方法。");
    }

    static void ComputeStatic(){
        System.out.println("Compute的static方法。");
    }
}
/*实现类*/
public class ComputeImpl implements Compute {
    @Override
    public int sub(int x, int y) {
        return 0;
    }

    @Override
    public void ComputeDefault() {

    }
}

       

/*定义一个SubTest接口去继承接口Compute*/
public interface SubTest extends Compute {

}
/*SubTest接口的实现类*/
public class SubTestImpl implements SubTest {
    @Override
    public int sub(int x, int y) {
        return 0;
    }

    @Override
    public void ComputeDefault() {

    }
}
/*SubTest接口的测试类*/
public class Main1 {
    public static void main(String[] args) {
        SubTest subTest = new SubTestImpl();
        subTest.ComputeDefault();
        subTest.sub(2,3);
    }
}

       可以发现接口中的默认方法,即default方法可以被继承或者实现,而静态方法,即static修饰的有方法体的方法不会被继承或实现。下面是实现的几个常用方法:

/*Compute接口的测试类*/
public class Main {
    public static void main(String[] args) {
        Compute compute = new ComputeImpl();
        System.out.println(compute.sub(2,1));
        compute.ComputeDefault();
    }
}

         示例如下:我们会发现static方法能够被它自身所调用。

/*Computer接口的测试类*/
public class Main {
    public static void main(String[] args) {
        Compute compute = new ComputeImpl();
        System.out.println(compute.add(2, 1));
        System.out.println(compute.sub(2, 1));
        Compute.minus(1,2);
    }
}

            结论1:接口中的static不能被继承,也不能被实现类调用,只能被自身调用。

    现在我么在子接口中重写default方法,再进行调用:

/*重写default方法*/
public class Main1 {
    public static void main(String[] args) {
        SubTest subTest = new SubTestImpl();
        subTest.ComputeDefault();
        subTest.sub(2,3);
    }
}

/*执行结果*/
D:\jdk1.8\bin\java "

subTest default方法。

Process finished with exit code 0

            结论2:default方法被继承时,可以被子接口重写。

发布了88 篇原创文章 · 获赞 383 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_42047611/article/details/81453841