JDK8中接口的新特性

JDK8中接口的新特性

Java8中,接口除了可以定义全局常量和抽象方法外还可以拥有静态方法和默认方法。

public interface CompareA {
    //静态方法
    public static void method1(){
        System.out.println("CompareA:北京");
    }

    //默认方法
    public default void method2(){
        System.out.println("CompareA:上海");
    }
    
    public default void method3(){
        System.out.println("CompareA");
    }
}

规则

  1. 接口中定义的静态方法,只能通过接口来调用

    public class SubClassTest {
        public static void main(String[] args) {
            SubClass s = new SubClass();
            //s.method1();  错误写法
            CompareA.method1();
        }
    }
    
    class SubClass implements CompareA{
    	
    }
    
  2. 通过实现类的对象,可以调用接口中的默认方法

  3. 如果实现类重写了接口中的默认方法,调用时仍然调用的是重写以后的方法

  4. 如果子类(实现类)继承的父类和实现的接口中声明了同名同参数的方法,则子类在没有重写此方法的情况下,默认调用的是父类中的方法。 类优先原则

    class SubClass extends SuperClass implements CompareA{
    }
    
    class SuperClass {
        public void method3(){
            System.out.println("SuperClass");
        }
    }
    
    new SubClass().method3() //结果为 SuperClass
    
  5. 如果实现类实现了多个接口,而多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下会报错。 接口冲突

上一篇:JDK8开发环境的安装


下一篇:ConcurrentHashMap(JDK8)源码分析及夺命9连问