第5章 接口与多态.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第5章 接口与多态.ppt》由会员分享,可在线阅读,更多相关《第5章 接口与多态.ppt(89页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java语言程序设计(第2版)清华大学 郑莉JAVA语言程序设计第 5 章 接口与多态郑莉Java语言程序设计(第2版),郑莉,清华大学2目录5.1接口5.2塑型5.3多态的概念5.4多态的应用5.5构造方法与多态5.6内部类5.7本章小结Java语言程序设计(第2版),郑莉,清华大学35.1 接口接口与抽象类一样都是定义多个类的共同属性使抽象的概念更深入了一层,是一个“纯”抽象类,它只提供一种形式,并不提供实现允许创建者规定方法的基本形式:方法名、参数列表以及返回类型,但不规定方法主体也可以包含基本数据类型的数据成员,但它们都默认为static和finalJava语言程序设计(第2版),郑莉
2、,清华大学45.1.1 接口的作用及语法接口的作用是面向对象的一个重要机制实现多继承,同时免除C+中的多继承那样的复杂性建立类和类之间的“协议”把类根据其实现的功能来分别代表,而不必顾虑它所在的类继承层次;这样可以最大限度地利用动态绑定,隐藏实现细节实现不同类之间的常量共享5.1 接口Java语言程序设计(第2版),郑莉,清华大学5接口允许我们在看起来不相干的对象之间定义共同行为5.1.1 接口的作用及语法与抽象类的不同5.1 接口Java语言程序设计(第2版),郑莉,清华大学6保险公司的例子具有车辆保险、人员保险、公司保险等多种保险业务,在对外提供服务方面具有相似性,如都需要计算保险费(pr
3、emium)等,因此可声明一个Insurable接口在UML图中,实现接口用带有空三角形的虚线表示InsurableCompanyPersonCar5.1 接口5.1.1 接口的作用及语法例5-1Java语言程序设计(第2版),郑莉,清华大学7接口的语法声明格式为接口修饰符interface接口名称extends父接口名/方法的原型声明或静态常量接口的数据成员一定要赋初值,且此值将不能再更改,允许省略final关键字接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字5.1.1 接口的作用及语法5.1 接口Java语言程序设计(第2版),郑莉,清华大学8例
4、5-1中的Insurable接口声明如下,可见其中的方法都是抽象方法publicinterfaceInsurablepublicintgetNumber();publicintgetCoverageAmount();publicdoublecalculatePremium();publicDategetExpiryDate();5.1.1 接口的作用及语法例5-1保险接口的声明5.1 接口Java语言程序设计(第2版),郑莉,清华大学9声明一个接口Shape2D,可利用它来实现二维的几何形状类Circle和Rectangle把计算面积的方法声明在接口里pi值是常量,把它声明在接口的数据成员里i
5、nterfaceShape2D/声明Shape2D接口finaldoublepi=3.14;/数据成员一定要初始化publicabstractdoublearea();/抽象方法在接口的声明中,允许省略一些关键字,也可声明如下interfaceShape2Ddoublepi=3.14;doublearea();5.1 接口5.1.1 接口的作用及语法例5-2Java语言程序设计(第2版),郑莉,清华大学105.1.2 实现接口接口的实现接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象利用接口设计类的过程,称为接口的实现,使用implements关键字语法如下pu
6、blic class 类名称 implements 接口名称 /*Bodies for the interface methods*/*Own data and methods.*/必须实现接口中的所有方法来自接口的方法必须声明成public5.1 接口Java语言程序设计(第2版),郑莉,清华大学11实现接口Insurable,声明汽车类实现例5.1中的Insurable接口,实现接口中的所有抽象方法publicclassCarimplementsInsurablepublicintgetPolicyNumber()/writecodeherepublicdoublecalculatePre
7、mium()/writecodeherepublicDategetExpiryDate()/writecodeherepublicintgetCoverageAmount()/writecodeherepublicintgetMileage()/新添加的方法/writecodehere5.1 接口5.1.2 实现接口例5-3Java语言程序设计(第2版),郑莉,清华大学12对象可以被转型为其所属类实现的接口类型getPolicyNumber、calculatePremium是Insurable接口中声明的方法getMileage是Car类新添加的方法,Insurable接口中没有声明此方法Ca
8、rjetta=newCar();Insurableitem=(Insurable)jetta;/对象转型为接口类型item.getPolicyNumber();item.calculatePremium();item.getMileage();/接口中没有声明此方法,不可以jetta.getMileage();/类中有此方法,可以(Car)item).getMileage();/转型回原类,可调用此方法了5.1 接口5.1.2 实现接口对象转型Java语言程序设计(第2版),郑莉,清华大学135.1.2 实现接口例5-4class Circle implements Shape2D doubl
9、e radius;public Circle(double r)radius=r;public double area()return(pi*radius*radius);class Rectangle implements Shape2D int width,height;public Rectangle(int w,int h)width=w;height=h;public double area()return(width*height);l声明声明Circle与与Rectangle两个类实现两个类实现Shape2D接口接口5.1 接口Java语言程序设计(第2版),郑莉,清华大学14测
10、试类publicclassInterfaceTesterpublicstaticvoidmain(Stringargs)Rectanglerect=newRectangle(5,6);System.out.println(Areaofrect=+rect.area();Circlecir=newCircle(2.0);System.out.println(Areaofcir=+cir.area();运行结果Areaofrect=30.0Areaofcir=12.565.1 接口5.1.2 实现接口例5-4运行结果Java语言程序设计(第2版),郑莉,清华大学15声明接口类型的变量,并用它来访问
11、对象publicclassVariableTesterpublicstaticvoidmain(Stringargs)Shape2Dvar1,var2;var1=newRectangle(5,6);System.out.println(Areaofvar1=+var1.area();var2=newCircle(2.0);System.out.println(Areaofvar2=+var2.area();输出结果Areaofvar1=30.0Areaofvar2=12.565.1.2 实现接口例5-55.1 接口Java语言程序设计(第2版),郑莉,清华大学16MovableObject接口
12、定义了所有“可移动对象”能做的事情publicinterfaceMovableObjectpublicbooleanstart();publicvoidstop();publicbooleanturn(intdegrees);publicdoublefuelRemaining();publicvoidchangeSpeed(doublekmPerHour);5.1.2 实现接口 MovableObject接口5.1 接口Java语言程序设计(第2版),郑莉,清华大学17Plane、Car、Train、Boat分别实现MovableObject接口publicclassPlaneimplemen
13、tsMovableObjectpublicintseatCapacity;publicCompanyowner;publicDatelastRepairDate;/实现MovalbleObject接口的所有方法publicbooleanstart()/启动飞机,成功则返回truepublicvoidstop()/停止publicbooleanturn(intdegrees)/转向,成功则返回truepublicdoublefuelRemaining()/返回燃料剩余量publicvoidchangeSpeed(doublekmPerHour)/改变速度/plane类自己的方法:publicDa
14、tegetLastRepairDate()/.publicdoublecalculateWindResistance()/.5.1.2 实现接口 MovableObject接口的实现5.1 接口Java语言程序设计(第2版),郑莉,清华大学18为MovableObjects安装遥控器(remotecontrol)publicclassRemoteControlprivateMovableObjectmachine;RemoteControl(MovableObjectm)machine=m;/按下“启动”按钮:publicvoidstart()booleanokay=machine.start
15、();if(!okay)display(NoResponseonstart);/.remotecontrol构造方法的形参类型为MovableObject,它可以是Plane,Car,Train,Boat,等等5.1.2 实现接口 RemoteControl类5.1 接口Java语言程序设计(第2版),郑莉,清华大学195.1.3 多重继承多重继承Java的设计以简单实用为导向,不允许一个类有多个父类但允许一个类可以实现多个接口,通过这种机制可实现多重继承一个类实现多个接口的语法如下类修饰符class类名称implements接口1,接口2,5.1 接口Java语言程序设计(第2版),郑莉,清
16、华大学20Car类可以实现接口Insurable,Drivable,SellablepublicclassCarimplementsInsurable,Drivable,Sellable.5.1.3 多重继承 Car的例子5.1 接口Java语言程序设计(第2版),郑莉,清华大学21声明Circle类实现接口Shape2D和ColorShape2D具有pi与area()方法,用来计算面积Color则具有setColor方法,可用来赋值颜色通过实现这两个接口,Circle类得以同时拥有这两个接口的成员,达到了多重继承的目的interfaceShape2D/声明Shape2D接口finaldoub
17、lepi=3.14;/数据成员一定要初始化publicabstractdoublearea();/抽象方法interfaceColorvoidsetColor(Stringstr);/抽象方法5.1.3 多重继承 例5-65.1 接口Java语言程序设计(第2版),郑莉,清华大学22class Circle implements Shape2D,Color /实现实现Circle类类 double radius;String color;public Circle(double r)/构造方法构造方法 radius=r;public double area()/定义定义area()的处理方式的
18、处理方式 return(pi*radius*radius);public void setColor(String str)/定义定义setColor()的处理方的处理方式式 color=str;System.out.println(color=+color);5.1.3 多重继承 例5-65.1 接口Java语言程序设计(第2版),郑莉,清华大学23测试类publicclassMultiInterfaceTesterpublicstaticvoidmain(Stringargs)Circlecir;cir=newCircle(2.0);cir.setColor(blue);System.ou
19、t.println(Area=+cir.area();输出结果color=blueArea=12.565.1.3 多重继承 例5-6运行结果5.1 接口Java语言程序设计(第2版),郑莉,清华大学245.1.4 接口的扩展接口的扩展接口可通过扩展的技术派生出新的接口原来的接口称为基接口(baseinterface)或父接口(superinterface)派生出的接口称为派生接口(derivedinterface)或子接口(subinterface)派生接口不仅可以保有父接口的成员,同时也可加入新成员以满足实际问题的需要实现接口的类也必须实现此接口的父接口接口扩展的语法interface子接口
20、的名称extends父接口的名称1,父接口的名称2,5.1 接口Java语言程序设计(第2版),郑莉,清华大学25Shape是父接口,Shape2D与Shape3D是其子接口。Circle类及Rectangle类实现接口Shape2D,而Box类及Sphere类实现接口Shape3D5.1.4 接口的扩展 例5-7Shape接口接口Shape2D接口接口Shape3D接口接口Sphere类类Box类类Rectangle类类Circle类类5.1 接口Java语言程序设计(第2版),郑莉,清华大学26部分代码如下/声明Shape接口interfaceShapedoublepi=3.14;void
21、setColor(Stringstr);/声明Shape2D接口扩展了Shape接口interfaceShape2DextendsShapedoublearea();5.1.4 接口的扩展 例5-75.1 接口Java语言程序设计(第2版),郑莉,清华大学27classCircleimplementsShape2Ddoubleradius;Stringcolor;publicCircle(doubler)radius=r;publicdoublearea()return(pi*radius*radius);publicvoidsetColor(Stringstr)color=str;Syste
22、m.out.println(color=+color);publicclassExtendsInterfaceTester/测试类publicstaticvoidmain(Stringargs)Circlecir;cir=newCircle(2.0);cir.setColor(blue);System.out.println(Area=+cir.area();5.1.4 接口的扩展 例5-75.1 接口Java语言程序设计(第2版),郑莉,清华大学28运行结果color=blueArea=12.56说明首先声明了父接口Shape,然后声明其子接口Shape2D之后声明类Circle实现Shap
23、e2D子接口,因而在此类内必须明确定义setColor()与area()方法的处理方式最后在主类中我们声明了Circle类型的变量cir并创建新的对象,最后通过cir对象调用setColor()与area()方法5.1.4 接口的扩展例5-7运行结果5.1 接口Java语言程序设计(第2版),郑莉,清华大学29FixedInsurable和DepreciatingInsurable接口都继承了Insurable接口实现它们类也必须实现Insurable接口中的所有方法publicinterfaceDepreciatingInsurableextendsInsurablepublicdouble
24、computeFairMarketValue();publicinterfaceFixedInsurableextendsInsurablepublicintgetEvaluationPeriod();5.1.4 接口的扩展 Insurable接口的例子5.1 接口Java语言程序设计(第2版),郑莉,清华大学305.2 塑型塑型(type-casting)又称为类型转换方式隐式(自动)的类型转换显式(强制)的类型转换Java语言程序设计(第2版),郑莉,清华大学315.2.1 塑型的概念塑型的对象包括基本数据类型将值从一种形式转换成另一种形式引用变量将对象暂时当成更一般的对象来对待,并不改变
25、其类型只能被塑型为任何一个父类类型对象所属的类实现的一个接口被塑型为父类或接口后,再被塑型回其本身所在的类5.2 塑性Java语言程序设计(第2版),郑莉,清华大学32Manager对象可以被塑型为Employee、Person、Object或Insurable,不能被塑型为Customer、Company或CarObjectPersonEmployeeCustomerManagerCompanyCarInsurable5.2.1 塑型的概念一个例子5.2 塑性Java语言程序设计(第2版),郑莉,清华大学33基本数据类型相容类型之间存储容量低的自动向存储容量高的类型转换引用变量被塑型成更一般
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第5章 接口与多态 接口
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内