ch06-03面向对象编程-面向接口

上传人:宝路 文档编号:48340559 上传时间:2018-07-13 格式:PPT 页数:48 大小:1.54MB
返回 下载 相关 举报
ch06-03面向对象编程-面向接口_第1页
第1页 / 共48页
ch06-03面向对象编程-面向接口_第2页
第2页 / 共48页
ch06-03面向对象编程-面向接口_第3页
第3页 / 共48页
ch06-03面向对象编程-面向接口_第4页
第4页 / 共48页
ch06-03面向对象编程-面向接口_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《ch06-03面向对象编程-面向接口》由会员分享,可在线阅读,更多相关《ch06-03面向对象编程-面向接口(48页珍藏版)》请在金锄头文库上搜索。

1、第六章节:面向对象编程接口与设计模式回顾v 举例说明在什么样的情况下,需要使用到继承?v 在Java程序中,多态带给我们的好处是什么?v 掌握Java接口v 理解Java接口与多态的关系v 掌握面向接口编程的思想v 掌握常量接口的使用v 设计模式本章目标单一继承的局限性1、如下的类图描述正确吗? 2、青蛙是两栖动物,怎么办呢?我该何处何从什么是Java接口v 接口与前面所学的抽象类一样是一种规范和标准、可以约 束类的行为 v 定义一个接口不指定具体的实现 v 一个Java接口是一些方法特征的集合,但没有方法的实现Java接口中定义的方法在不同的地方被实现,可以具有完 全不同的行为一个例子一个实

2、例public interface PCI public void start(); public void stop(); class SoundCard implements PCI public void start() System.out.println(“Du du.“);public void stop() System.out.println(“Sound stop!“); 这是Java接口,相当于主 板上的PCI插槽的规范class NetworkCard implements PCI public void start() System.out.println(“Send.

3、“);public void stop() System.out.println(“Network stop!“); 声卡、网卡都实现了PCI插槽的规范,但行为完全不同 一个实例public class Assembler public static void main(String args) PCI nc = new NetworkCard();PCI sc = new SoundCard();nc.start();sc.start(); 可以使用Java接口标识类型 运行时,根据实际创建的对象类型调用相应的方法实现Du du. Send.控制台输出21生活中的接口USB接口使用USB接口

4、必须 符合USB规范接口是一套规范,遵守这个规范就可以实现功能 接口的特点JAVA中一个类能否继承多个父类?v 接口: 接口可以说是对继承单根性的扩展 接口提供了一组规范、一个标准 接口屏蔽了实现的细节 方便多人协同开发v 特点: 接口不能被实例化 不管是否标识,接口中所有方法都是抽象的,公共的 。 接口中只能定义常量用接口实现让我们为青蛙找一个合法的身份? JAVA接口v 开发这样一个小系统,包含类型:教员、中心、打 印机,具体要求如下: 教员、以及中心都具有方法:输出详细信息 中心具有属性:打印机,能够通过中心的打印机打印教员 或中心的详细信息 系统要具备良好的可扩展性与可维护性打印 教员

5、 中心 教员 详细信息中心 详细信息 detail方法 (输出详细信息)JAVA接口v以下这个解决方案中存在着什么问题?public class UCSTeacher1 /输输出教员员的详细详细 信息 public String detail() return “本人是CSU教员“; public class UCSSchool1 private Printer printer = new Printer();/输输出中心的详细详细 信息 public String detail() return “这里是CSU中心“; /使用打印机打印教员信息 public void print(UCSTe

6、acher1 t) printer.print(t.detail(); /使用打印机打印中心信息 public void print(UCSSchool1 s) printer.print(s.detail(); public class Printer public void print(String content) System.out.println(“开始打印: “); System.out.println(content); 每增加一种新类型,都需要增加相应的print(类型名称 var)方法 程序的可扩展性及可维护性极差 这不符合系统的要求用Java接口重构项目 v 在这个系统中

7、,存在继承关系吗? 教员、中心属于两种不同的类型,无法通过“is-a”找到一个合适的父类v 教员、中心都存在一个共同的方法特征:detail,它们对detail方法有各自不同的实现这完全符合Java接口的定义类图定义一个Java接口,在其中定义 detail方法,但没有具体实现实现这个Java接口,不同的类对 detail方法有不同的具体实现使用了Java接口之后,这个系统有了怎样的 改进?Java接口重构之后public interface IPrintable public String detail(); public class UCSSchool2 implements Introd

8、uceableprivate Printer printer = new Printer();/输输出中心的详细详细 信息public String detail() return “这这里是中信培训训中心“; /使用中心打印机打印信息public void print(IPrintable intro) printer.print(intro.detail(); public class UCSTeacher2 implements IPrintable/输输出教员员的详细详细 信息public String detail() return “本人是中信教员员“; 通过Java接口,我们同样

9、可以享受到多态性的好处,大大提高了 程序的可扩展性及可维护性 使用print方法时,参数可以是任何Introduceable接口的实现类 的对象,不必再为不同的类型建立不同的print方法了接口作为参数v 接口描述了一个对象的特征v 传递接口就是传递了实现接口的对象public class SxtSchool2 /使用中心打印机打印信息public void print(Introduceable intro) printer.print(intro.detail(); 什么是面向接口编程v 开发系统时,主体构架使用接口,接口构成系统的骨架v 这样就可以通过更换接口的实现类来更换系统的实现pu

10、blic class UCSSchool2 implements Introduceable private Printer printer = new Printer(); public String detail() return “这这里是中信培训训中心“; /使用中心打印机打印信息public void print(Introduceable intro) printer.print(intro.detail(); 面向接口编程第一步v 能否在前面的安例上添加黑白或彩色打印功能 v 采用面向接口编程的方式实现, v 以下是三个步骤中的第一步:抽象出Java接口 1、分析: 黑白、彩色打

11、印机都存在一个共同的方法特征:print 黑白、彩色打印机对print方法有各自不同的实现public interface PrinterFace public void print(String content); 面向接口编程第二步v 采用面向接口编程的方式实现,以下是三个步骤中的 第二步: v 实现Java接口: 结论:黑白、彩色打印机都实现PrinterFace接口,各自实现 print方法public class ColorPrinter implements PrinterFace public void print(String content) System.out.print

12、ln(“彩色打印: “);System.out.println(content); public class BlackPrinter implements PrinterFace public void print(String content) System.out.println(“黑白打印: “);System.out.println(content); 面向接口编程第三步v 采用面向接口编程的方式实现,以下是三个步骤中的 第三步: 使用3、具体实现:public class MySchool3 implements Introduceableprivate PrinterFace p

13、rinter; /打印机public void setPrinter(PrinterFace p) this.printer = p;public String detail() return “这这里是中“;public void print(Introduceable intro)printer.print(intro.detail(); public class Test public static void main(String args) / 创创建中心实实例AccpSchool3 school=new AccpSchool3();/为该为该 中心配备备黑白打印机school.se

14、tPrinter(new BlackPrinter();school.print(school); /为该为该 中心配备备彩色打印机school.setPrinter(new ColorPrinter();school.print(school); 现场编程收作业的问题如老师和学员都可以收作业, 那么收作业的方法应该放在哪个类?A:Teacher类B:Student类C:两个都放D:Person类E:重新定义造成代码冗余如果增加一个工程师类,他不会收作业如果继承这个类,Person类怎么办?调用收作业的方法不 需要改变自定义一个接口来实现IHomeworkCollector现场编程收作业的问题

15、public interface IHomeworkCollectorvoid CollectHomework();public class Student extends Person implements IHomeworkCollectorpublic void CollectHomework() MessageBox.Show(“报告老师!作业收集完毕!“); 1、定义一个收作业的接口2、在有收作业功能的类实现该接口3、不同的类收作业方式不同作为返回值和参数的意义v 接口作为参数 传递了实现接口的对象 v 接口作为返回值 返回一个实现了接口的对象接口和抽象类比较派生类必须实现未实现的方

16、法 包含未实现的方法 不能实例化相似点指定定义常量可以定义成员变量 实现接口的类必须实现所有成员非抽象派生类必须实现抽象方法 可以实现多个接口只能继承一个类 用 interface 定义用 abstract 定义不同点接口抽象类 小结public interface Introduceable public String detail();public void introduction() detail(); private void showMessage();void speak(); Java接口中的方法必须是publicJava接口中不能有方法体实现 编译器会自动加上public修饰符请指出下

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号