当前课程知识点:“做中学”Java程序设计 > 第4章使用面向对象高级语法 > 4.5使用接口 > Video
在上一节课当中 抽象类向我们展示了比具体类更加强大的灵活特性
你可能已经注意到程序设计的灵活性 往往和抽象性是成正比的
越是抽象 也就给具体的实现 留下了灵活的余地
从而也意味着它的灵活性就更大
那么我们今天要来介绍的接口 你可以将它看成是一个更加纯粹的抽象类型
接口如协议一样 描述了接口的实现者对外部的一种承诺
这样其它对象就可以根据这个协议 来和实现接口的对象进行交流
在语法上 定义一个接口的语法 和 定义类是非常类似的
只需要将关键字class 替换成interface
与抽象类不同 它除了定义一些公有的抽象方法之外 不能定义任何的实例方法
此外 接口当中的方法签名默认的已经隐含了 public 和 abstract 修饰符
所以不管你是否将它们显示的写出来 它们都是 public 和 abstract
这也就意味着 接口当中定义的方法 必须由它的实现者 来一一实现
同样 接口当中定义的变量也不是普通的实例变量 它只能是静态常量
这就意味着 当你在接口当中定义变量时 它默认隐含了 public final static 修饰符
不管你是否显式地将它们写出来 它们都隐含在那里
最后 变量名还要遵守全部大写的约定 同时还要初始化
再使用接口的时候 需要特别注意 接口应用的相关规则
对于一个实现类而言 它既可以具有继承关系 又具有接口的实现功能
在继承关系当中我们曾经讲过 一个类只能继承一个父类
而接口的实现可以不同 一个类可以实现多个接口
你需要在多个接口当中使用逗号将它们分隔
需要记住的是 接口呢 只能通过子类来实现 而不是通过继承来覆盖
接口呢 是一种新的数据类型 它的使用呢 也符合“里氏替换原则”
所以我们可以用接口来实现 面向对象的多态特性
下面呢 我们通过具体示例来看看如何来实现接口了
这段代码来自于JDK当中的String的代码片段
可以看到String类型实现了三个接口
Comparable
这个接口当中定义了一个可比较的抽象方法compare To方法
任何可比较类型都可以直接去实现这个接口 从而具有可比较的功能
我们这里的String 实现了这个接口 也就赋予了可比较的功能
需要特别注意的是 这里的尖括号
表示这里要比较的对象类型必须是一个String类型
在随后的代码的相应位置上 实现了这个接口当中定义的抽象方法
这些代码片段就是这个方法的具体实现
我们也可以查看一下CharSequence这个接口 这个接口当中定义了四个抽象方法
因此 你必须在String当中一一对这四个抽象方法呢 进行实现
在代码的相应位置上 我们可以看到这个方法的具体实现
再来观察一下Serializable接口 你会惊讶的发现 该接口当中没有定义任何的方法
这里大家需要记住 接口和类一样 是一种数据类型
由于接口当中定义的方法都是抽象的
显然你就无法实例化它们
那么这种数据类型有何作用呢
回顾上节课的内容 结合同样符合我们的“里氏替换原则”
你可以利用接口定义的引用变量去指向任何一个实现者的对象
或者说 你也可以使用接口来实现面向对象的多态特性
相对于抽象类来实现多态 使用接口 具有更大的灵活性
因为抽象类受限于类的继承关系 每个类呢 只能继承一个父类
而接口打破了这个限制
一个类也可以实现多个接口 所以你可以灵活的去组织这些接口
因此 在实际的使用过程当中 使用接口的场合 远远要比抽象类要多的多
知道了这一点 我们就不难理解
一个Serializable接口 虽然它里面没有定义任何的抽象方法
但这种做法声明了一个新的数据类型 能够让子类来实现这个接口
就可以让子类 具有这个特定的身份标识
下面我们来看“学生信息管理系统”当中的任务
这里有一个需求是:我们需要根据不同的学生类型 进行相应的积分策略的设计
对于普通的学生 如果它的成绩等级是A 那么将得到四分
如果等级是B 将得到三分
如果等级是C 将得到两分
如果等级是D 将得到一分
其它的等级呢 不给分
对于获得荣誉的学生 它的各项等级得分要比普通的学生多一分
此外 尖子班的学生也有自己的一套积分规则
类似这样的问题 我们可以把经常需要变动的部分 抽象出一个统一的接口
从而 设计成接口实现的形式来应对
这张类图当中的《interface》标注 告诉我们这里的 GradingStrategy 是一个接口
虚线加空心箭头的组合 表述的是一个实现关系
这里的子类 RegularGradingStrategy 、HonorsGradingStrategy 和 EliteGradingStrategy 分别实现了这个接口
而每个 Student 对象 拥有自己的一套积分策略
在定义接口之前 我们先向项目当中导入写好的Grade类
将这个文件从桌面上 拖放到我们的 proj03 的包当中
接下去我们来实现接口 在包 proj03 当中 单击右键 选择新建
这次呢我们选择 interface 接口
在接口的名称当中输入 GradingStrategy
单击 回车
在接口的框架当中 我们写上一个抽象方法 public int getGradePointsFor
好 我们的接口就这样定义好了 是不是非常简单呢
但是 你需要注意的是 尽管我没有加上 abstract 修饰符 但是它是隐含在里面的
通常 在接口当中我们定义方法的时候 我们可以把 abstract 省略 以保持简洁
下面呢 我们来创建一个新的类
在类的向导对话框当中
我们把这个类的名字呢取名为 RegularGradingStrategy
这个类作为普通学生的一个积分策略 从而要实现我们刚才定义的接口
那么 在创建这个类的向导对话框当中 你可以直接在 interface 这一栏的右侧
单击 Add... 这个按钮 来添加多个要实现的接口
这里呢 我们就找到刚才定义的GradingStrategy
单击 Finish 完成 我们可以看到自动生成的代码框架当中呢 已经把接口的实现语法写好了
同时要求你完成 对接口当中的抽象方法进行定义
要实现这个抽象方法 我们只需要根据需求 使用简单的几个 if 语句就能实现完成
就像这样写
当它的成绩等于 A 的时候 我们将返回四分
当它的成绩等于 B 的时候 我们返回三分
当它的成绩是 C 的时候 我们将返回两分
如果是 D 则返回一分
其它就不给分 return 0;
好了 一个简单的 RegularGradingStrategy 就这样实现完毕
使用同样的方式要实现 HonorsGradingStrategy 就不难了 同学们可以自己动手试试看
最后 作为学生 他需要拥有一套自己的积分策略
那么 我们可以将这个积分策略 作为类的 Student 的一个实例变量保存进去
作为学生数据的一部分 我们可以找到学生类
在这个类的相应的位置上 定义一个实例变量
为了保存不同的积分策略 我们将它的数据类型定义为 GradingStrategy 接口类型
将它初始化成 RegularGradingStrategy 子类对象
同时 为了能够改变这个对象信息 我们给它提供一套setter getter方法
从而保证 外界能够指定学生的积分策略对象
好了 剩下的测试代码的工作就交给你
今天的接口的用法你学会了吗?
在今天的课程当中 我们学习了接口的 基本概念 定义语法 以及它的应用示例
接口作为一种抽象手段 为Java的多态实现提供了重要支持
对于它的理解和掌握 有助于你学习和掌握Java当中的高级主题
-1.1Java简介
--01Java简介
-1.2搭建Java开发环境
--Video
-1.3使用记事本编写Java程序
--Video
-1.4使用Eclipse开发Java程序
--Video
-1.5导入/导出Java项目
--Video
-1.6管理组织代码
--Video
-第1章初始Java--测试题
-2.1认识标识符
--Video
-2.2变量和变量类型
--Video
-2.3数据类型和类型转换
--Video
-2.4使用常量
--Video
-2.5使用注释
--Video
-2.6使用运算符进行算术运算
--Video
-第2章使用Java基本语法(1)--测试题
-2.7使用运算符进行逻辑处理
--Video
-2.8使用if进行流程控制
--Video
-2.9使用switch进行流程控制
-2.10使用循环
--Video
-2.11循环的跳出和继续
--Video
-2.12多重循环
--Video
-第2章使用Java基本语法(2)--测试题
-3.1认识类和对象
--Video
-3.2为类添加属性
--Video
-3.3为类添加方法
--Video
-3.4为类添加静态方法
--Video
-3.5递归方法
--递归方法
-3.6构造方法
--Video
-3.7重载方法
--Video
-第3章使用面向对象基础语法--测试题
-4.1使用继承语法
--Video
-4.2使用数组
--Video
-4.3使用数组类操作数组
--Video
-4.4使用抽象类
--Video
-4.5使用接口
--Video
-第4章使用面向对象高级语法--测试题
-5.1异常处理机制
--Video
-5.2捕获异常
--Video
-5.3创建自定义异常
--Video
-第5章捕获并处理异常--测试题
-6.1SWT图形界面
--Video
-6.2使用SWT布局管理-FillLayout
-6.3使用SWT布局管理-RowLayout
-6.4SWT中的事件模型
--Video
-6.5常见事件处理写法
--Video
-第6章使用SWT设计界面--测试题
-7.1微波炉模拟程序的界面制作
--Video
-7.2微波炉模拟程序的代码重构
--Video
-7.3微波炉模拟程序的事件监听
--Video
-7.4微波炉模拟程序的数字键盘
--Video
-7.6微波炉模拟程序CookTimer
--Video
-7.7微波炉模拟程序添加图像
--Video
-7.8微波炉模拟程序添加声音
--Video
-7.9微波炉模拟程序安装包制作
--Video