interface

接口和类是并列的结构
JDK7:定义全局变量和抽象方法
JDK8:定义全局变量和抽象方法还可以定义静态方法.默认方法

  • 接口中全局变量省略了public static final
  • 接口中方法省略了public abstract
  • 接口不能定义构造器
  • 接口通过和类实现(implements)来使用
  • 实现类覆盖所有的抽象方法,就可以正常实例化
  • 没有覆盖所有的抽象方法,仍是一个抽象类
  • 实现多个接口中间 , 隔开;
  • 接口和接口可以多继承

抽象类和接口有那些不同

都不能实例化
抽象类有构造方法,接口不能声明构造方法
抽象类单继承,接口多继承

JDK:8接口的特性

  • 静态方法,默认方法
  • public static void 方法名(){ 方法体 }
  • public default void 方法名(){方法体 }
  • 接口的静态方法,只能接口调用
  • 默认的方法可以通过实现类来调用
  • 如果子类和实现类继承了 父类和实现的接口声明了同名同参数的方法,那么子类在没有重写的情况下,默认使用的是父类的同名同参数的方法,类优先原则
  • 如果实现类实现了多个接口,而这多个接口定义了同名同参数的默认方法,那么实现类没有重写就会报错,接口冲突
  • 实现类方法中使用父类被重写的方法,接口名.super.方法名

先让类去实现接口,并重写方法

  • 接口 对象1 = new 类名;
  • 类名 对象2 = new 类名;

在使用的时候,好像区别都不大。实例化对象调用方法,你就会发现使用接口 对象名 = new 类名; 方式实例化的对象只能调用接口中有的方法,而不能调用类中特有的方法。而使用类名 对象名 = new 类名;方式创建出来的对象可以调用所有的方法

JDK9的特性

  • 私有方法
  • private void 方法名(){方法体}
  • 接口中的私有方法只能在的本接口使用