概念理解

  • 可以理解为,接口就是一份契约,由类实现契约。契约中我编写了某些大的方针与前提,而签了约的类可以具体问题具体分析来实现自己的功能
  • 以现实中的生活举例:鸡是动物,苹果是水果,而鸡和苹果都是可以吃的,此时“可以吃的”就是接口
    • 这里面的继承关系是:鸡继承于动物,苹果继承于水果
    • 这里面的接口实现关系:鸡实现了“可以吃的”接口,苹果实现了“可以吃的”接口;实现了这个接口就代表它是可以吃的
  • 首先在Java中,类只能继承一个类(超类),而超类通常是对某批类的抽象,来表示这些类的共性;当有一批类,分别继承了某些超类时,又需要对这批类的某个/多个共同行为进行抽象时,就可以使用接口来实现

简单使用示例

  • 通常的做法是,定义一个接口,以及它抽象方法(对某个行为做个约定),再在类中使用关键字implements来声明实现了哪个接口,并根据类的实际情况,重写接口中定义的抽象方法即可
    • 实际例子:将“走路”作为一个接口,它的抽象方法就是行走;人和狗都会走路,而人使用两只脚走路,狗使用四只脚走路
      1. // 定义接口“走路”
      2. interface Walk {
      3. void walking();
      4. }
      5. // 定义类——人,并且实现“走路”接口
      6. class People implements Walk {
      7. // 重写接口中的方法
      8. @Override
      9. public void walking() {
      10. System.out.println("人用两只脚走路.");
      11. }
      12. }
      13. // 定义类——狗,并且实现“走路”接口
      14. class Dog implements Walk {
      15. // 重写接口中的方法
      16. @Override
      17. public void walking() {
      18. System.out.println("狗用四只脚走路.");
      19. }
      20. }

演变

  • Java1.0 :静态常量(static final)、抽象方法(public abstract) 【最初设计接口是抽象类型】
  • Java1.1 :静态常量、抽象方法、嵌套类(public static)、嵌套接口(public static)【引入内部类】
  • Java 5 :静态常量、抽象方法、嵌套类、嵌套接口、嵌套枚举(public static)、嵌套注释(public static)【引入与类型参数有关的泛型】
    • 接口中可定义类型参数T,只能用于抽象方法的参数和返回类型,不能与静态成员一起使用
  • Java 8 :静态常量、抽象方法、默认方法(public default)、静态方法(public static)、嵌套类、嵌套接口、嵌套枚举、嵌套注释
  • Java 9 :静态常量、抽象方法、默认方法、静态方法、私有方法(private)、嵌套类、嵌套接口、嵌套枚举、嵌套注释

参考