java入门补充09swing ui编程(6学时) (2)

上传人:第*** 文档编号:49584842 上传时间:2018-07-31 格式:PPT 页数:24 大小:524.50KB
返回 下载 相关 举报
java入门补充09swing ui编程(6学时) (2)_第1页
第1页 / 共24页
java入门补充09swing ui编程(6学时) (2)_第2页
第2页 / 共24页
java入门补充09swing ui编程(6学时) (2)_第3页
第3页 / 共24页
java入门补充09swing ui编程(6学时) (2)_第4页
第4页 / 共24页
java入门补充09swing ui编程(6学时) (2)_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《java入门补充09swing ui编程(6学时) (2)》由会员分享,可在线阅读,更多相关《java入门补充09swing ui编程(6学时) (2)(24页珍藏版)》请在金锄头文库上搜索。

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、MobileHar

2、dDisk n 实现各自的Read和Write方法 n Computer类中包含上述移动设备类列表 n 最后再测试扩展:新加MP3Player类Java编程技术FlashDisk类class FlashDisk public 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 f

3、inished!“); Java编程技术MobileHardDisk类class MobileHardDisk public 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 Compu

4、ter FlashDisk fd; MobileHardDisk mhd; public Computer() 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 Co

5、mputer(fd); cmp1.fd.Write();MobileHardDisk mhd=new MobileHardDisk(); Computer cmp2=new Computer(mhd); cmp2.mhd.Write(); 此时考虑以后的扩展性,如: MP3Player mp3=new MP3Player(); Computer cmp3=new Computer(mp3); cmp3.mp3.PlayMusic();Computer对象调用 不同设备实现操作Java编程技术新设备MP3Player类class MP3Player public void Read() Syst

6、em.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(“Music is playing“); 思考:此时Computer会怎样?Java编程技术此时修改Computer类class

7、Computer FlashDisk fd; MobileHardDisk mhd; MP3Player mp3; /新加设备 public Computer(MP3Player mp3) /新加设备驱动 this.mp3=mp3; 修改Computer类以兼容各 种移动设备,扩展性很差这就如在一个真实的计算机上,当有了一种新的移动存 储设备后,就要将计算机大卸八块,然后增加一个新的 插口,再编写一套针对此新设备的驱动程序。这种设计 显然不可取。【返回】Java编程技术方案2:抽象类n 抽象类可实现多态性。n 移动设备类继承extends抽象类,类中的代码不变。n Computer类使用多态可

8、以动态替换移动设备,而不必将 移动存储类硬编码在Computer中。Java编程技术新建抽象类:MobileStorageabstract class MobileStorage public abstract void Read(); public abstract void Write(); FlashDisk、MobileHardDisk类添加继承:class FlashDisk extends MobileStorage /类中的代码不变 Java编程技术简化Computer类class Computer MobileStorage ms; public Computer()publi

9、c Computer(MobileStorage 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); c

10、mp2.ms.Write(); 抽象类实现 多态性Java编程技术新设备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 voi

11、d PlayMusic() /添加一个新方法 System.out.println(“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(); 父对象要访问子对象成员时 必须先强制转化为子对象

12、【返回】Java编程技术方案3:接口n 用接口实现多态。 n 移动设备类实现implements接口,类中的代码不变。 n Computer类仍然使用多态性实现动态替换移动设备。Java编程技术新建接口IMobileStorageinterface IMobileStorage public void Read(); public void Write(); FlashDisk、MobileHardDisk、MP3Player类均要实现接口:class FlashDisk implements IMobileStorage /类中的代码不变 Java编程技术简单修改一下Computer类cla

13、ss Computer IMobileStorage 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(); Com

14、puter cmp2=new Computer(mp3); (MP3Player)cmp2.ims).PlayMusic(); 接口实现 多态性Java编程技术何时用抽象类or接口n 看动机。n 如果主要是为了实现多态性,而不是为了代码重 用,就用接口。【返回】Java编程技术方案4:多接口n 定义2个接口IReadable和IWritable,两个接口分别只包含 Read和Write。n 然后定义接口IMobileStorage继承IReadable和IWritable,n 剩下的代码实现与【方案3】完全一样。Java编程技术定义接口interface IReadable public void Read(); interface IWritable public void Write(); interface IMobileStorage extends IReadable,IWritable/这里没有新扩展 剩余代码同方案三,没有任何变化Java编程技术单接口or多接口这要看具体情况。 例如新设备-只读光盘,它只实现读方法而没有写方法,因 此须采用多接口方案。 如果我们知道以后出现的东西都是能读又能写的,那这多接 口接口设计就没有必要了。 总之:防止设计不足,也要防止设计过度。【完】

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

当前位置:首页 > 办公文档 > 解决方案

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