Java中的向下转型和向上转型理解
来源:互联网 发布:淘宝火拼下架 编辑:程序博客网 时间:2024/06/05 06:10
例子1:
/*毕姥爷 讲课 钓鱼毕老师 extends 毕姥爷 讲课 看电影要求体现多态要看到向上转型,向下转型*///描述毕姥爷class 毕姥爷{ public void 讲课() { system.out.println("xx"); } public void 钓鱼() { system.out.println("ss"); } } //描述毕老师 class 毕老师 extends 毕姥爷{ public void 讲课() { system.out.println("xx"); } public void 看电影() { system.out.println("ddd"); } } class DuoTai{ public static void main(String[] args) { //多态形式 毕姥爷 x=new 毕老师();//向上转型 x.讲课(); x.钓鱼(); //要想使用毕老师的特有方法,看电影 毕老师 y=(毕老师)x;//向下转型 y.看电影(); y.钓鱼(); //转型过程中,至始至终,只有子类对象在做类型的变化
例子2:
阶段一:
笔记本电脑运行,笔记本中有一个运行功能
阶段二:
想用一个鼠标,又有一个功能使用鼠标,并多了一个鼠标对象
阶段三:
还想使用一个键盘功能,又要多一个功能
问题:每多一个功能就需要在笔记本对象中定义一个函数,不好,扩展性怎能解决?
降低鼠标,键盘等外围设备和笔记本电脑的耦合性。
//阶段一//描述笔记本电脑class NoetBook{ public void run() { system.out.println("book run"); }}class USBTest{ public static void main(String[] args) { NoteBook book=new NoteBook(); book.run(); }}
//阶段二:需要一个鼠标//多一个对象,鼠标class Mouse{ //开启功能 public void open() { system.out.println("mouse open"); } //关闭功能 public void close() { system.out.println("mouse close"); }}class NoetBook{ public void run() { system.out.println("book run"); } //定义使用鼠标功能,鼠标不确定,定义成参数 public void useMouse(Mouse m) { //m必须指向鼠标对象才可以调用方法 if(m!=null) m.open(); m.close(); }}class USBTest{ public static void main(String[] args) { NoteBook book=new NoteBook(); book.run(); book.useMouse(new Mouse()); }}
阶段三:如果还想使用其他设备如:键盘、外置键盘。可以通过在笔记本对象中继续定义usekey()等方法来完成,但是其需要不断改动笔记本类中的内容。扩展性太差,维护性也不好。
每增加一个设备就加一个功能,说明设备和笔记本的耦合性太强
所以不要每次都面对具体的类型,只要定义一个规则,让后期的设备都符合这个规则,应该采用接口的方式来进行解耦
//重新设计 1.先定义规则interface USB{ //设备开启 public void open(); //设备关闭 public void close();}//描述笔记本class NoteBook{ //运行 public void run() { System.out.println("book run"); }} //使用符合规则的外围设备public void useUSB(USB usb)//定义了一个接口类型的引用{ if(usb!=null) { usb.open(); usb.close(); }}class MouseByUSB implements USB{ public void open() { System.out.println("mouse open"); } public void close() { System.out.println("mouse close"); }}class USBTest{ public static void main(String[] args) { NoteBook book=new NoteBook(); book.run(); book.useUSB(null); book.useUSB(new MouseByUSB()); }}
阅读全文
0 0
- Java中的向下转型和向上转型理解
- java中的向上转型和向下转型
- Java中的向上转型和向下转型
- java中的向上转型和向下转型
- java中的向下转型和向上转型
- java中的向上转型和向下转型
- Java中的向上转型和向下转型
- Java中的向上转型和向下转型
- Java中的向上转型和向下转型
- java中的向上转型和向下转型
- Java中的向上转型和向下转型
- Java 中的向上转型和向下转型
- Java之向上转型,向下转型简单理解和实例
- 七、java向上转型和向下转型的理解
- java多态中的向上转型和向下转型
- java 多态中的向上转型和向下转型
- JAVA中的向上转型与向下转型
- Java中的向上转型 & 向下转型 (OOP)
- 【leedcode】392. Is Subsequence
- C++ 状态机
- Apicloud开发新闻类App实战项目-老孟编程
- SpringBoot项目的云服务器部署
- 文章标题
- Java中的向下转型和向上转型理解
- vue-router使用history的配置问题
- 欢迎使用CSDN-markdown编辑器
- Java中部分技术点的出现---个人的思索。。。。。
- Meterial Design 的activity转场效果
- 初学STL
- 山东大学2016-2017学年面向对象开发技术期末试题(回忆版)
- Oracle那些事(2)-管理工具概述
- 模拟银行ATM取款机