JDK8接口的新特性

/**
* 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 }

 

 
posted @ 2021-09-19 23:05  橘猫的夏天  阅读(75)  评论(0编辑  收藏  举报