ThinkinginJava07(多态).ppt
《ThinkinginJava07(多态).ppt》由会员分享,可在线阅读,更多相关《ThinkinginJava07(多态).ppt(49页珍藏版)》请在三一办公上搜索。
1、Java编程思想,第七章:多态,面向对象的设计,数据抽象化、封装继承多态,多态,接口与实现分离:实现了“是什么”与“怎样做”两个模块的分离代码的组织以及可读性均能获得改善能创建易于扩充的程序多态性涉及对“类型”的分解:通过继承可将一个对象当作它自己的类型或者它自己的基础类型对待只需一段代码,即可对所有不同的类型(相同的基础类型中衍生出来的)进行同样的处理相似类型之间的区分是通过“函数的行为差异”实现而这些函数都可通过基础类函数唤起,向上转型,将某个 object reference 视为一个指向基类的 reference,class A,class B,/:Music.java(p220)/I
2、nheritance,/Wind objects are instruments/because they have the same interface:class Wind extends Instrument/Redefine interface method:public void play(Note n)System.out.println(Wind.play();public class Music public static void tune(Instrument i)/.i.play(Note.middleC);public static void main(String a
3、rgs)Wind flute=new Wind();tune(flute);/Upcasting/:Ans:Wind.play(),将对象的类型忘掉:为了扩充,/:c07:music2:Music2.java(p221)class Note private int value;private Note(int val)value=val;public static final Note MIDDLE_C=new Note(0),C_SHARP=new Note(1),B_FLAT=new Note(2);/Etc.class Instrument public void play(Note n
4、)System.out.println(Instrument.play();class Wind extends Instrument public void play(Note n)System.out.println(Wind.play();,class Stringed extends Instrument public void play(Note n)System.out.println(Stringed.play();class Brass extends Instrument public void play(Note n)System.out.println(Brass.pla
5、y();,public class Music2 public static void tune(Wind i)i.play(Note.MIDDLE_C);public static void tune(Stringed i)i.play(Note.MIDDLE_C);public static void tune(Brass i)i.play(Note.MIDDLE_C);public static void main(String args)Wind flute=new Wind();Stringed violin=new Stringed();Brass frenchHorn=new B
6、rass();tune(flute);/No upcasting,oveloading tune(violin);tune(frenchHorn);/:,Ans:Wind.playStringed.playBrass.play,函数调用绑定,Binding:建立函数调用和函数体的关联C:先期绑定Java:后期绑定(除声明为final外)动态绑定,执行期绑定final 关键字:关闭动态绑定,产生正确的行为,调用 base class 中的函数所有的 derived classes 会产生正确的行为将一条消息发给一个对象,让对象自行判断要做什么事情,Shape 及其子类,后期绑定:扩展性,/:Sh
7、apes.java(p225)/Polymorphism in Javaclass Shape void draw()void erase()class Circle extends Shape void draw()System.out.println(Circle.draw();void erase()System.out.println(Circle.erase();,class Square extends Shape void draw()System.out.println(Square.draw();void erase()System.out.println(Square.er
8、ase();class Triangle extends Shape void draw()System.out.println(Triangle.draw();void erase()System.out.println(Triangle.erase();,public class Shapes public static Shape randShape()switch(int)(Math.random()*3)default:/To quiet the compiler case 0:return new Circle();case 1:return new Square();case 2
9、:return new Triangle();public static void main(String args)Shape s=new Shape9;/Fill up the array with shapes:for(int i=0;i s.length;i+)si=randShape();/Make polymorphic method calls:for(int i=0;i s.length;i+)si.draw();/:,Ans:(答案不唯一)Circle.drawSquare.draw Triangle.drawTriangle.drawSquare.drawSquare.dr
10、awSquare.drawCircle.drawSquare.draw,扩充性,后来可加入更多的型别在围绕tune()方法的其他所有代码都发生变化的同时,tune()方法却丝毫不受它们的影响,依然正常工作。这正是利用多形性希望达到的目标。允许程序员“将发生改变的东西同没有发生改变的东西区分开”,Instrument 及其子类,/:Music3.java(p227)/An extensible programimport java.util.*;class Instrument public void play()System.out.println(Instrument.play();publ
11、ic String what()return Instrument;public void adjust()class Wind extends Instrument public void play()System.out.println(Wind.play();public String what()return Wind;public void adjust(),class Percussion extends Instrument public void play()System.out.println(Percussion.play();public String what()ret
12、urn Percussion;public void adjust()class Stringed extends Instrument public void play()System.out.println(Stringed.play();public String what()return Stringed;public void adjust()class Brass extends Wind public void play()System.out.println(Brass.play();public void adjust()System.out.println(Brass.ad
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ThinkinginJava07 多态
链接地址:https://www.31ppt.com/p-5303162.html