/**
* JDK8及以后:接口中除了定义全局常量和抽象方法外,还可以定义静态方法、默认方法
* >1.接口中定义的静态方法只能通过接口来调用
* >2.通过实现类的对象,可调用接口中的默认方法
* >3.如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情
* 况下,默认调用的是父类中同名同参数的方法。-->类优先原则
* >4.如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法
* 的情况下,报错。-->接口冲突。这就需要我们在实现类中重写此方法。
* >5.调用接口当中的默认方法:接口名.super.方法名
*
*
*/
1 package com.fu.java3; 2 3 public class SubClassTest { 4 public static void main(String[] args) { 5 SubClass s = new SubClass(); 6 s.method2(); 7 s.method3(); 8 CompareA.method1();//接口中定义的静态方法只能通过接口来调用 9 } 10 } 11 class SubClass extends SuperClass implements CompareA,CompareB{ 12 public void method2(){ 13 System.out.println("SuperClass:北京"); 14 } 15 public void myMethod(){ 16 method2();//调用自己重写的方法 17 super.method2();//调用父类声明的方法 18 //调用接口中默认的方法 19 CompareA.super.method2(); 20 CompareB.super.method2(); 21 22 } 23 }
1 package com.fu.java3; 2 3 public class SuperClass { 4 public void method2(){ 5 System.out.println("SuperClass:上海"); 6 } 7 }
1 package com.fu.java3; 2 3 4 public interface CompareA { 5 //静态方法 6 public static void method1(){ 7 System.out.println("CompareA:北京"); 8 } 9 //默认方法 10 public default void method2(){ 11 System.out.println("CompareA:上海"); 12 } 13 //默认方法 14 default void method3(){//省略了public ,并不是说权限为default 15 System.out.println("CompareA:上海"); 16 } 17 18 }
1 package com.fu.java3; 2 3 public interface CompareB { 4 public default void method2(){ 5 System.out.println("CompareB:上海"); 6 } 7 }