Java中的向下转型和向上转型理解
2017-06-10 21:35
267 查看
例子1:
例子2:
阶段一:
笔记本电脑运行,笔记本中有一个运行功能
阶段二:
想用一个鼠标,又有一个功能使用鼠标,并多了一个鼠标对象
阶段三:
还想使用一个键盘功能,又要多一个功能
问题:每多一个功能就需要在笔记本对象中定义一个函数,不好,扩展性怎能解决?
降低鼠标,键盘等外围设备和笔记本电脑的耦合性。
阶段三:如果还想使用其他设备如:键盘、外置键盘。可以通过在笔记本对象中继续定义usekey()等方法来完成,但是其需要不断改动笔记本类中的内容。扩展性太差,维护性也不好。
每增加一个设备就加一个功能,说明设备和笔记本的耦合性太强
所以不要每次都面对具体的类型,只要定义一个规则,让后期的设备都符合这个规则,应该采用接口的方式来进行解耦
/* 毕姥爷 讲课 钓鱼 毕老师 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()); } }
相关文章推荐
- 理解java中向上向下转型(java多态原理)
- JAVA基础知识再学习(5)理解多态&向上转型&向下转型
- 七、java向上转型和向下转型的理解
- Java之向上转型,向下转型简单理解和实例
- JAVA中的向上转型与向下转型
- Java 向下和向上转型
- 对Java向上转型的理解
- JAVA中的向上转型与向下转型
- Java向上转型与向下转型
- Java中的向上转型 & 向下转型 ( OOP )
- Java向上转型与向下转型(good)
- java向上转型 向下转型(upcasting downcasting)
- Java向上转型与向下转型
- JAVA的向上转型与向下转型(二)
- 关于java的接口回调和向上转型的理解
- Java转型(向上或向下转型)
- Java多态(利用向上向下转型和反射机理)
- java 向上转型和向下转型
- java 向上转型和向下转型
- java向上转型和向下转型