JDK8提供的接口默认方法

        在以往的编写代码中,例如我们会定义三层架构,包含 controller,service,mapper等。service中,我们会详细的分为 ***Service 和 ***ServiceImpl的形式 。

                        ​​​​​​​        ​​​​​​​        

        在JDK8以前,interface接口的方法只能定义常量 和 抽象方法。

        默认的修饰词为public staticfinal  和 public abstract 。

        在JDK8开始,抽象方法则可以使用default 和 static修饰,这为以后的一些场景中,不需要每个子类实现的 特定的方法 提供了默认实现,不强制子类去重写,方便编码。

        接口方法,编写了 原始的抽象方法 add,默认方法 get  和 static静态方法 staticDel

public interface JDK8Interface {

    /**
     * 默认的时候 就是为 public abstract
     */
    void add();

    /**
     * jdk8 开始 提供了默认的方法,接口也可以定义默认的方法体
     */
     default void get(){

        System.out.println("6666");

    }

    /**
     * JDK8开始 可以用static 在 接口中修饰方法
     */
     static void staticDel(){

         System.out.println("Del");
     }
}

        而实现类中,只强制重写add方法。 

public class JDK8InterfaceImpl implements JDK8Interface {

    /**
     *
     * 定义子类实现的时候,没有强制要求重写default 和 static修饰的方法
     */
    @Override
    public void add() {
        System.out.println("ADD");
    }
}

        测试结果,抽象方法和默认方法子类可以调用,静态方法 只能通过 接口类调用。

        这里延伸一下,为什么子类不能调用父接口的静态方法呢??

        因为实现和继承不同,JAVA中是单继承多实现的,即一个实现类可以实现多个接口,若子类中没有静态方法,继承的父类中有静态方法,还可以调用一下。但是倘若多个接口中存在相同的static方法,则不知道调用的是哪个接口的方法了,所以干脆不允许调用了。

public class Test01

{

    public static void main(String[] args) {

        JDK8InterfaceImpl jdk8Interface = new JDK8InterfaceImpl();
        jdk8Interface.get();
        jdk8Interface.add();
        //只有接口才能调用static
        JDK8Interface.staticDel();

    }
}

        结果显示,可以正常输出和调用。

         JDK8提供的接口默认方法_第1张图片

你可能感兴趣的:(JAVA,java,接口,抽象类)