Java编程技术课件:06类的高级特征(对多态、抽象和接口的理解2学时)_第1页
Java编程技术课件:06类的高级特征(对多态、抽象和接口的理解2学时)_第2页
Java编程技术课件:06类的高级特征(对多态、抽象和接口的理解2学时)_第3页
Java编程技术课件:06类的高级特征(对多态、抽象和接口的理解2学时)_第4页
Java编程技术课件:06类的高级特征(对多态、抽象和接口的理解2学时)_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java编程技术对多态、抽象和接口的理解编程:模拟计算机与移动存储设备的Read和Write操作。n 移动设备: U盘类和移动硬盘类,含有两个方法Read和Write。n 计算机类: 能调用移动设备读写操作。n 扩展性要求: 由于可能会有新的移动存储设备(如MP3播放器),所以计算机类必须有扩展性。 新设备可能有新的方法,如MP3Player新加一个PlayMusic方法。Java编程技术4种方案n 方案1:简单直白n 方案2:抽象类n 方案3:接口n 方案4:多接口Java编程技术方案1:简单直白n 分别定义U盘FlashDisk类和移动硬盘MobileHardDisk类n 实现各自的Rea

2、d和Write方法n Computer类中包含上述移动设备类列表n 最后再测试扩展:新加MP3Player类Java编程技术FlashDisk类class FlashDiskpublic void Read()System.out.println(Reading from FlashDisk);System.out.println(Read finished!);public void Write()System.out.println(Writing to FlashDisk);System.out.println(Write finished!);Java编程技术MobileHardDis

3、k类class MobileHardDiskpublic void Read()System.out.println(Reading from MobileHardDisk);System.out.println(Read finished!);public void Write()System.out.println(Writing to MobileHardDisk);System.out.println(Write finished!);Java编程技术Computer类class ComputerFlashDisk fd;MobileHardDisk mhd; public Compu

4、ter()public Computer(FlashDisk fd)this.fd=fd;public Computer(MobileHardDisk mhd)this.mhd=mhd;假设构造函数是设备驱动移动设备列表Computer类需要实例化这些移动设备Java编程技术测试public class test public static void main(String args) FlashDisk fd=new FlashDisk();Computer cmp1=new Computer(fd);cmp1.fd.Write(); MobileHardDisk mhd=new Mobil

5、eHardDisk();Computer cmp2=new Computer(mhd);cmp2.mhd.Write();此时考虑以后的扩展性,如:MP3Player mp3=new MP3Player();Computer cmp3=new Computer(mp3);cmp3.mp3.PlayMusic();Computer对象调用不同设备实现操作Java编程技术新设备MP3Player类class MP3Playerpublic void Read()System.out.println(Reading from MP3Player);System.out.println(Read fi

6、nished!);public void Write()System.out.println(Writing to MP3Player);System.out.println(Write finished!);public void PlayMusic() /添加一个新方法System.out.println(Music is playing);思考:此时Computer会怎样?Java编程技术此时修改Computer类class ComputerFlashDisk fd;MobileHardDisk mhd; MP3Player mp3; /新加设备public Computer(MP3Pl

7、ayer mp3) /新加设备驱动this.mp3=mp3;修改Computer类以兼容各种移动设备导致扩展性很差这就如在一个真实的计算机上,当有了一种新的移动存储设备后,就要将计算机大卸八块,然后增加一个新的插口,再编写一套针对此新设备的驱动程序。这种设计显然不可取。【返回】Java编程技术方案2:抽象类n 抽象类可实现多态性。n 定义一个抽象类MobileStorage(含Read和Write抽象方法)n 移动设备类(U盘FlashDisk、移动硬盘MobileHardDisk)继承extends抽象类,类中的代码不变。n Computer类使用抽象类来替换移动设备列表,利用多态性而不必将

8、移动存储类硬编码在Computer中。Java编程技术新建抽象类:MobileStorageabstract class MobileStoragepublic abstract void Read();public abstract void Write();FlashDisk、MobileHardDisk类添加继承:class FlashDisk extends MobileStorage /类中的代码不变Java编程技术改造Computer类class ComputerMobileStorage ms; public Computer()public Computer(MobileSto

9、rage ms) this.ms=ms;无需为每个设备写驱动这样代码得到简化只需使用抽象对象抽象类运行时动态绑定具体子类Java编程技术测试public class test public static void main(String args) FlashDisk fd=new FlashDisk();Computer cmp1=new Computer(fd);cmp1.ms.Write(); MobileHardDisk mhd=new MobileHardDisk();Computer cmp2=new Computer(mhd);cmp2.ms.Write();抽象类实现多态性Ja

10、va编程技术新设备MP3Player类class MP3Player extends MobileStorage public void Read()System.out.println(Reading from MP3Player);System.out.println(Read finished!);public void Write()System.out.println(Writing to MP3Player);System.out.println(Write finished!);public void PlayMusic() /添加一个新方法System.out.println(

11、Music is playing);思考:此时Computer又会怎样?继承抽象类类中代码保持不变(-不再变化)Java编程技术测试扩展性 - 新设备public class test public static void main(String args) MP3Player mp3=new MP3Player();Computer cmp2=new Computer(mp3);( (MP3Player)cmp2.ms ).PlayMusic(); 父对象要访问子对象成员时必须先强制转化为子对象【返回】Java编程技术方案3:接口n 用接口实现多态。n 定义一个接口IMobileStorag

12、e(含Read和Write方法声明)n 移动设备类实现implements接口,类中的代码不变。n Computer类使用接口作为设备列表,利用多态性实现动态替换移动设备。Java编程技术新建接口IMobileStorageinterface IMobileStoragepublic void Read();public void Write();FlashDisk、MobileHardDisk、MP3Player类均要实现接口:class FlashDisk implements IMobileStorage /类中的代码不变Java编程技术简单修改一下Computer类class Comp

13、uterIMobileStorage ims; public Computer()public Computer(IMobileStorage ims) this.ims=ims;将抽象对象换成接口类型接口运行时动态绑定具体类Java编程技术测试public class test public static void main(String args) FlashDisk fd=new FlashDisk();Computer cmp1=new Computer(fd);cmp1.ims.Write();MP3Player mp3=new MP3Player();Computer cmp2=n

14、ew Computer(mp3);(MP3Player)cmp2.ims).PlayMusic();接口实现多态性Java编程技术何时用抽象类or接口n 看动机。n 如果主要是为了实现多态性,而不是为了代码重用,就用接口。【返回】Java编程技术方案4:多接口例如新设备-只读光盘,它只实现读方法而没有写方法,因此须采用多接口方案。如果我们知道以后出现的东西都是能读又能写的,那这多接口接口设计就没有必要了。总之:防止设计不足,也要防止设计过度。Java编程技术方案4:多接口n 定义2个接口IReadable和IWritable,两个接口分别只包含Read和Write。n 定义接口IMobileSto

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论