java8接口新特性

在接口中可以添加具体的方法

1.静态方法

实现该接口时,不论是抽象类还是普通类,都不允许重写改方法,在普通方法中的调用方式需要使用接口名.方法名

2.default方法

静态方法和default方法定义:

package intership.interfacetest;

/**
 * @Author: yf.zuo
 * @Date: 13:13 2018/8/20
 */
public interface InterfaceA {
    static void staticTest(){
        System.out.println("staticA");
    }
    default void test(){
        System.out.println("A");
    }
    void testA();
}

 普通类实现该接口时,可以直接定义对象调用该接口的default方法,也可以重写(注释掉的部分),对于接口中没有方法体的函数,普通类在实现该接口时必须重写该方法(testA())

package intership.interfacetest;

/**
 * @Author: yf.zuo
 * @Date: 13:16 2018/8/20
 */
public class InterfaceTest implements InterfaceA{
//    @Override
//    public void test(){
//        System.out.println("InterfaceTest");
//    }

    @Override
    public void testA() {

    }


    public static void main(String args[]){
        new InterfaceTest().test();
        InterfaceA.staticTest();
        InterfaceB.staticTest();
    }
}

如果该普通类实现了两个接口,而这两个接口中又存在同名同参数的default方法,则该普通类必须重写这个方法,抽象类也需要重写,因为在调用的时候不知道调用哪个接口中的default方法。

package intership.interfacetest;

/**
 * @Author: yf.zuo
 * @Date: 13:15 2018/8/20
 */
public interface InterfaceB{
    static  void staticTest(){
        System.out.println("staticB");
    }
    default  void test(){
        System.out.println("B");
    }
}
package intership.interfacetest;

/**
 * @Author: yf.zuo
 * @Date: 13:16 2018/8/20
 */
public class InterfaceTest  implements InterfaceA , InterfaceB{
    @Override
    public void test(){
        System.out.println("InterfaceTest");
    }

    @Override
    public void testA() {

    }


    public static void main(String args[]){
        new InterfaceTest().test();
        InterfaceA.staticTest();
        InterfaceB.staticTest();
    }
}
原文地址:https://www.cnblogs.com/fay0926/p/9635746.html