【学习笔记】 唐大仕—Java程序设计 第4讲 类、包和接口之4.6 接口
接口(interface)
  • 接口,某种特征的约定
     定义接口interface
      所有方法都自动是public abstract
     实现接口implements
      可以实现多继承
      与类的继承关系无关
  • 面向接口编程,而不是面向实现
     Flyable f = new Bird()
     Java中有大量的接口
    其中Flyable为一个接口 Bird为实现此接口的一个类
接口的作用
  • 1.通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系,从而在一定意义上实现了多重继承
  • 通过接口可以指明多个类需要实现的方法
  • 通过接口可以了解对象的交互界面,而不需要了解对象所对应的类
示例
  • 下面我们给出一个接口的定义:
interface Collection{
    void add(Object obj); void delete(Object obj); Object find(Object obj); int size(); }
  • 通常接口以able或iable结尾,表名接口能完成一定的行为
  • 接口声明中还可以包括对接口访问权限以及它的父接口列表。完整的接口声明如下
[public]interface interfaceName [extends listOfSuperInterface]{ ......; }
  • 其中public指明任意类均可以使用这个接口,缺省情况下,只有与该接口定义在同一个包中的类才可以访问这个接口
  • extends子句与类声明中的extends子句基本相同,不同的是一个接口可以有多个父接口,用逗号隔开,而一个类只能有一个父类。子接口继承父接口中所有的常量和方法
接口类型
  • 接口可以作为一种引用类型来使用。任何实现该接口的类的实例都可以存储在该结构类型的变量中,通过这些变量可以访问类所实现的接口中的方法。Java运行时系统动态地确定该使用哪个类中的方法
  • 把接口作为一种数据类型可以不需要了解对象所对应的具体的类,以前面所定义的接口Collection和实现该接口的类FIFOQueue为例,下例中,我们以Collection作为引用类型来使用
class InterfaceType{
    public static void main(String args[]){ Collection c = new FIFOQueue(); ...... c.add(obj); ... } }
接口中的常量
  • 接口体重可以包含常量定义
  • 常量定义的格式为:type NAME = value;
  • 其中type可以是任意类型,NAME是常量名,通常都大写,value是常量值
  • 在接口中定义的常量可以被实现该接口的多个类所共享,它与C中用#define以及C++中用const定义的常量是相同的
  • 在接口中定义的常量具有public,static,final的属性
枚举
  • 从JDK1.5起,可以使用枚举
enum Light{ Red, Yellow, Green }
  • 使用:
Light light = Light.Red;
    switch( light ){ case Red:...break; }
  • Java中的枚举是用class来实现的,可以复杂地使用
Java8中的接口
  • Java8以上,接口成员还可以是:
     static方法
     具有实现体的方法(default方法)
      默认方法的好处是:提供了一个默认实现,子类在implements可以不用再重新写了