【学习笔记】 唐大仕—Java程序设计 第4讲 类、包和接口之4.6 接口

【学习笔记】 唐大仕—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可以不用再重新写了
posted @ 2018-11-04 23:20  cnRicky  阅读(388)  评论(0编辑  收藏  举报