interface的JDK8新特性

JDK8,除了定义全局常量和抽象方法,还可以定义静态方法,默认方法。

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

2、如果实现类实现了多个接口,而多个接口中定义了同名同参数的默认方法。那么在实现类没有重写的情况下,报错。--接口冲突,需要必须在实现类中重写写此方法。

3、如何在子类(实现类)中调用父类或接口中被重写的方法。

interface CompareA {

  //静态方法

  public static void method1(){

    System.out.println("compare1-beijing");

  }

  //默认方法

  public default void method2() {

    System.out.println("compare2-shanghai");

  }

  public default void method3() {

    System.out.println("compare3-shanghai");

  }

}
interface CompareB {

  public default void method3() {

    System.out.println("compareB3-shanghai");

  }

}

class SuperClass {

  public void method3() {

    System.out.println("Superclass-shanghai");

  }

}
class Subclass extends SuperClass implements CompareA,CompareB{

  public void method2() {//实现类可以重写接口中的默认方法

    System.out.println("Subclass-shanghai");

  }

  public void method3() {//实现类可以重写接口中的默认方法

    System.out.println("Subclass3-shanghai");

  }

  public void myMethod() {

    method3();//调用自己定义的重写的方法

    super.method3();//调用父类中声明的

    CompareA.super.method3();

    CompareB.super.method3();//调用接口中的默认方法

  }

}
public class SubclassTest {   

  
public static void main(String[] args) {     
    Subclass s
= new Subclass();     
    s.method2();
    //通过实现类的对象,可以调用接口中的默认方法   
  
    // Subclass.method1();     
    // s.method1();接口中定义的静态方法只能通过接口调用     
    CompareA.method1();
    s.method3();
  } }

 

posted @ 2022-03-04 17:04  泥鱼生长  阅读(49)  评论(0编辑  收藏  举报