接口就是体现规范的,其中用抽象方法定义的一组行为规范,接口是更加彻底的抽象。

接口的定义与特点

接口的格式如下,接口用关键字 interface 来定义

  1. public interface 接口名 {
  2. // 常量
  3. // 抽象方法
  4. }
  • Java 8之前接口中只能是抽象方法和常量,没有其他成分了。
  • 接口不能实例化。
  • 接口中的成员都是 public 修饰的,写不写都是,因为规范的目的是为了公开化。

    接口的用法

    接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类。
    1. 修饰符 class 实现类 implements 接口1, 接口2, 接口3 , ... {
    2. }
    从上面可以看出,接口可以被类单实现,也可以被类多实现。

注意:一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类。

  • 类和类的关系:单继承。
  • 类和接口的关系:多实现。
  • 接口和接口的关系:多继承,一个接口可以同时继承多个接口。

接口多继承的作用:规范合并,整合多个接口为同一个接口,便于子类实现。

Java 8 版本开始后,Java 只对接口的成员方法进行了新增

  • 默认方法:default 修饰,实现类对象调用。
  • 静态方法:static 修饰,必须用当前接口名调用(为了多实现)
  • 私有方法:private 修饰,Java 9 开始才有的,只能在接口内部被调用。
  • 他们都会默认被 public 修饰。 ```java public interface SportManInter { /**

    1. 1JDK 8开始 :默认方法(实例方法)
    2. -- 必须default修饰,默认用public修饰
    3. -- 默认方法,接口不能创建对象,这个方法只能过继给了实现类,由实现类的对象调用。

    */ default void run(){

      go();
      System.out.println("跑的很快~~~");
    

    }

    /**

    2、静态方法
      必须使用static修饰,默认用public修饰
      -- 接口的静态方法,必须接口名自己调用。
    

    */ static void inAddr(){

      System.out.println("我们都在学习Java新增方法的语法,它是Java源码自己会用到的~~~");
    

    }

    /**

     3、私有方法(实例方法)
       -- JDK 1.9开始才支持的。
       -- 必须在接口内部才能被访问
    

    */ private void go(){

      System.out.println("开始跑~~~");
    

    }

}

class PingPongMan implements SportManInter{ }

class Test{ public static void main(String[] args) { PingPongMan p = new PingPongMan(); p.run();

    SportManInter.inAddr();
    // PingPongMan.inAddr();
}

} ```

接口的注意事项

  1. 接口不能创建对象
  2. 一个类实现多个接口,多个接口中有同样的静态方法不冲突。(static 修饰,必须用当前接口名调用)
  3. 一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法,默认用父类的。
  4. 一个类实现了多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可。
  5. 一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承。