Java-接口

接口的定义和使用


  • 接口的用关键字interface来定义
  • 接口和类之间是实现而非继承 通过implement关键字来表示
  • 接口的子类 要么重写接口中的所有抽象方法 要么是抽象类

注意事项

  • 接口和类的实现关系 可以单实现 也可以多实现 一个类实现多个接口
  • 子类在继承父类的同时也可以实现多个接口

接口中的成员特点


  • 成员变量 只能是常量 默认用public static final修饰
  • 构造方法 接口没有构造方法
  • 成员方法 : JDK7之前 接口中的只能定义抽象方法 交给子类去重写

接口和类之间的关系


  • 类与类之间的关系 继承关系 只能单继承 不能多继承 但可以多层继承
  • 类和接口之间的关系 实现关系 可以单实现 也可以多实现
  • 接口和接口之间的关系 可以单继承 也可以多继承

对于最后一点 需要注意的就是 我们是实现最后一个子接口的时候 就需要把上面所有接口的抽象方法全部实现才行

JDK8以后新增的默认方法


  • 允许在接口中定义默认方法 需要使用关键字default修饰

    用于解决接口升级中的问题

  • 接口中默认方法的定义格式

    1
    public default  void fun(){}

注意事项


  • 默认方法不是抽象方法 所以不强制重写 如果被重写 重写是去掉default关键字
  • public 可以省略 default不能省略
  • 如果实现了多个接口 多个接口中存在相同名字的默认方法 子类就必须进行重写

所以默认方法就给实现接口的类提供了选择 之前接口中的抽象类你不实现就报错 现在默认方法你不实现也不会报错

JDK8后新增的静态方法


  • 允许在接口中定义静态方法 需要用static修饰
  • 接口中静态方法格式 (略)

注意事项

  • 静态方法只能通过接口名来实现 不能通过实现类名或者对象名来调用
  • public 可以省略 static关键字不可以省略

JDK9以后的接口中的私有方法


定义的格式是

1
2
3
private void show(){}    //这种格式是为了接口中的默认方法去调用的

private static void show(){} // 这种格式是为了接口中静态方法去调用的

说白了就是让接口中也有私有方法 不允许其他人来调用 只允许接口类中自己调用