清华大学java-第5章-课件.ppt
《清华大学java-第5章-课件.ppt》由会员分享,可在线阅读,更多相关《清华大学java-第5章-课件.ppt(92页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5章章 接口与多态接口与多态Programming in JAVA1清华大学 郑莉JAVA语言程序设计目录目录l5.1 接口接口l5.2 塑型塑型l5.3 多态的概念多态的概念l5.4 多态的应用多态的应用l5.5 构造方法与多态构造方法与多态l5.6 内部类内部类l5.7 本章小结本章小结2清华大学 郑莉JAVA语言程序设计5.1 接口接口l接口接口与抽象类一样都是定义多个类的共同属性使抽象的概念更深入了一层,是一个“纯”抽象类,它只提供一种形式,并不提供实现允许创建者规定方法的基本形式:方法名、参数列表以及返回类型,但不规定方法主体也可以包含基本数据类型的数据成员,但它们都默认为sta
2、tic和final3清华大学 郑莉JAVA语言程序设计5.1.1 接口的作用及语法接口的作用及语法l接口的作用接口的作用是面向对象的一个重要机制实现多继承,同时免除C+中的多继承那样的复杂性建立类和类之间的“协议”l把类根据其实现的功能来分别代表,而不必顾虑它所在的类继承层次;这样可以最大限度地利用动态绑定,隐藏实现细节l实现不同类之间的常量共享接口4清华大学 郑莉JAVA语言程序设计清华大学 郑莉JAVA语言程序设计l保险公司的例子保险公司的例子具有车辆保险、人员保险、公司保险等多种保险业务,在对外提供服务方面具有相似性,如都需要计算保险费(premium)等,因此可声明一个Insurabl
3、e接口在UML图中,实现接口用带有空三角形的虚线表示5.1.1 接口的作用及语法接口的作用及语法例例5_1InsurableCompanyPersonCar接口6清华大学 郑莉JAVA语言程序设计l接口的语法接口的语法声明格式为接口修饰符interface接口名称extends父接口名/方法的原型声明或静态常量接口的数据成员一定要赋初值,且此值将不能再更改,允许省略final关键字接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字5.1.1 接口的作用及语法接口的作用及语法接口7清华大学 郑莉JAVA语言程序设计l例例5.1中的中的Insurable 接
4、口声明如下,接口声明如下,可见其中的方法都是抽象方法可见其中的方法都是抽象方法publicinterfaceInsurablepublicintgetNumber();publicintgetCoverageAmount();publicdoublecalculatePremium();publicDategetExpiryDate();5.1.1 接口的作用及语法接口的作用及语法 例例5_1保险接口的声明保险接口的声明接口8清华大学 郑莉JAVA语言程序设计清华大学 郑莉JAVA语言程序设计5.1.2 实现接口实现接口l接口的实现接口的实现接口不能用new运算符直接产生对象,必须利用其特性设
5、计新的类,再用新类来创建对象利用接口设计类的过程,称为接口的实现,使用implements关键字语法如下public class 类名称 implements 接口名称 /*Bodies for the interface methods*/*Own data and methods.*/l必须实现接口中的所有方法l来自接口的方法必须声明成public接口10清华大学 郑莉JAVA语言程序设计l实现接口实现接口Insurable,声明汽车类实现例声明汽车类实现例5.1中的中的Insurable接口,实现接口中的所有抽象方法接口,实现接口中的所有抽象方法publicclassCarimpleme
6、ntsInsurablepublicintgetPolicyNumber()/writecodeherepublicdoublecalculatePremium()/writecodeherepublicDategetExpiryDate()/writecodeherepublicintgetCoverageAmount()/writecodeherepublicintgetMileage()/新添加的方法/writecodehere5.1.2 实现接口实现接口 例例5_3接口11清华大学 郑莉JAVA语言程序设计清华大学 郑莉JAVA语言程序设计5.1.2 实现接口实现接口 例例5_4cla
7、ssCircleimplementsShape2Ddoubleradius;publicCircle(doubler)radius=r;publicdoublearea()return(pi*radius*radius);classRectangleimplementsShape2Dintwidth,height;publicRectangle(intw,inth)width=w;height=h;publicdoublearea()return(width*height);l声明声明Circle与与Rectangle两个类实现两个类实现Shape2D接口接口接口13清华大学 郑莉JAVA语言
8、程序设计清华大学 郑莉JAVA语言程序设计l声明接口类型的变量,并用它来访问对象声明接口类型的变量,并用它来访问对象publicclassVariableTesterpublicstaticvoidmain(Stringargs)Shape2Dvar1,var2;var1=newRectangle(5,6);System.out.println(Areaofvar1=+var1.area();var2=newCircle(2.0);System.out.println(Areaofvar2=+var2.area();l输出结果输出结果Areaofvar1=30.0Areaofvar2=12.5
9、65.1.2 实现接口实现接口 例例5_5接口15清华大学 郑莉JAVA语言程序设计lMovableObject接口定义了所有接口定义了所有“可移动可移动对象对象”能做的事情能做的事情publicinterfaceMovableObjectpublicbooleanstart();publicvoidstop();publicbooleanturn(intdegrees);publicdoublefuelRemaining();publicvoidchangeSpeed(doublekmPerHour);5.1.2 实现接口实现接口 MovableObject接口接口接口16清华大学 郑莉JA
10、VA语言程序设计清华大学 郑莉JAVA语言程序设计l为为 MovableObjects安装遥控器安装遥控器(remote control)publicclassRemoteControlprivateMovableObjectmachine;RemoteControl(MovableObjectm)machine=m;/按下“启动”按钮:publicvoidstart()booleanokay=machine.start();if(!okay)display(NoResponseonstart);/.remotecontrol构造方法的形参类型为MovableObject,它可以是Plane,
11、Car,Train,Boat,等等5.1.2 实现接口实现接口 RemoteControl类类接口18清华大学 郑莉JAVA语言程序设计5.1.3 多重继承多重继承l多重继承多重继承Java的设计以简单实用为导向,不允许一个类有多个父类但允许一个类可以实现多个接口,通过这种机制可实现多重继承一个类实现多个接口的语法如下类修饰符class类名称implements接口1,接口2,接口19清华大学 郑莉JAVA语言程序设计lCar类可以实现接口类可以实现接口Insurable,Drivable,SellablepublicclassCarimplementsInsurable,Drivable,S
12、ellable.5.1.3 多重继承多重继承 Car的例子的例子接口20清华大学 郑莉JAVA语言程序设计l声明声明Circle类实现接口类实现接口Shape2D和和ColorShape2D具有pi与area()方法,用来计算面积Color则具有setColor方法,可用来赋值颜色通过实现这两个接口,Circle类得以同时拥有这两个接口的成员,达到了多重继承的目的interfaceShape2D/声明Shape2D接口finaldoublepi=3.14;/数据成员一定要初始化publicabstractdoublearea();/抽象方法interfaceColorvoidsetColor(
13、Stringstr);/抽象方法5.1.3 多重继承多重继承 例例5_6接口21清华大学 郑莉JAVA语言程序设计classCircleimplementsShape2D,Color/实现Circle类doubleradius;Stringcolor;publicCircle(doubler)/构造方法radius=r;publicdoublearea()/定义area()的处理方式return(pi*radius*radius);publicvoidsetColor(Stringstr)/定义setColor()的处理方式color=str;System.out.println(color=
14、+color);接口5.1.3 多重继承多重继承 例例5_622清华大学 郑莉JAVA语言程序设计清华大学 郑莉JAVA语言程序设计5.1.4 接口的扩展接口的扩展l接口的扩展接口的扩展接口可通过扩展的技术派生出新的接口l原来的接口称为基本接口(baseinterface)或父接口(superinterface)l派生出的接口称为派生接口(derivedinterface)或子接口(subinterface)派生接口不仅可以保有父接口的成员,同时也可加入新成员以满足实际问题的需要实现接口的类也必须实现此接口的父接口接口扩展的语法interface子接口的名称extends父接口的名称1,父接口
15、的名称2,接口24清华大学 郑莉JAVA语言程序设计lShape是父接口,是父接口,Shape2D与与Shape3D是其子接是其子接口。口。Circle类及类及Rectangle类实现接口类实现接口Shape2D,而而Box类及类及Sphere类实现接口类实现接口Shape3D 5.1.4 接口的扩展接口的扩展 例例5_7Shape接口接口Shape2D接口接口Shape3D接口接口Sphere类类Box类类Rectangle类类Circle类类接口25清华大学 郑莉JAVA语言程序设计l部分代码如下部分代码如下/声明Shape接口interfaceShapedoublepi=3.14;voi
16、dsetColor(Stringstr);/声明Shape2D接口扩展了Shape接口interfaceShape2DextendsShapedoublearea();5.1.4 接口的扩展接口的扩展 例例5_7接口26清华大学 郑莉JAVA语言程序设计清华大学 郑莉JAVA语言程序设计l运行结果运行结果color=blueArea=12.56l说明说明首先声明了父接口Shape,然后声明其子接口Shape2D之后声明类Circle实现Shape2D子接口,因而在此类内必须明确定义setColor()与area()方法的处理方式最后在主类中我们声明了Circle类型的变量cir并创建新的对象,
17、最后通过cir对象调用setColor()与area()方法5.1.4 接口的扩展接口的扩展 例例5_7运行结果运行结果接口28清华大学 郑莉JAVA语言程序设计lFixedInsurable 和和DepreciatingInsurable接口接口都继承了Insurable接口实现它们类也必须实现Insurable接口中的所有方法publicinterfaceDepreciatingInsurableextendsInsurablepublicdoublecomputeFairMarketValue();publicinterfaceFixedInsurableextendsInsurable
18、publicintgetEvaluationPeriod();5.1.4 接口的扩展接口的扩展 Insurable接口的例子接口的例子接口29清华大学 郑莉JAVA语言程序设计清华大学 郑莉JAVA语言程序设计5.2.1 塑型的概念塑型的概念l塑型的对象包括塑型的对象包括基本数据类型l将值从一种形式转换成另一种形式引用变量l将对象暂时当成更一般的对象来对待,并不改变其类型l只能被塑型为任何一个父类类型对象所属的类实现的一个接口被塑型为父类或接口后,再被塑型回其本身所在的类塑型31清华大学 郑莉JAVA语言程序设计lManager对象对象可以被塑型为Employee、Person、Object或
19、Insurable,不能被塑型为Customer、Company或CarObjectPersonEmployeeCustomerManagerCompanyCarInsurable5.2.1 塑型的概念塑型的概念 一个例子一个例子塑型32清华大学 郑莉JAVA语言程序设计l基本数据类型基本数据类型相容类型之间存储容量低的自动向存储容量高的类型转换l引用变量引用变量被塑型成更一般的类Employeeemp;emp=newManager();/将Manager类型的对象直接赋给/Employee类的引用变量,系统会/自动将Manage对象塑型为Employee类被塑型为对象所属类实现的接口类型Ca
20、rjetta=newCar();Insurableitem=jetta;5.2.1 塑型的概念塑型的概念 隐式隐式(自动自动)的类型转换的类型转换塑型33清华大学 郑莉JAVA语言程序设计5.2.1 塑型的概念塑型的概念 显式显式(强制强制)的类型转换的类型转换l基本数据类型基本数据类型(int)871.34354;/结果为871(char)65;/结果为A(long)453;/结果为453Ll引用变量:还原为本来的类型引用变量:还原为本来的类型Employeeemp;Managerman;emp=newManager();man=(Manager)emp;/将emp强制塑型为本来的类型塑型3
21、4清华大学 郑莉JAVA语言程序设计5.2.2 塑型的应用塑型的应用l塑型应用的场合包括塑型应用的场合包括赋值转换l赋值号右边的表达式类型或对象转换为左边的类型方法调用转换l实参的类型转换为形参的类型算数表达式转换l算数混合运算时,不同类型的项转换为相同的类型再进行运算字符串转换l字符串连接运算时,如果一个操作数为字符串,一个操作数为数值型,则会自动将数值型转换为字符串塑型35清华大学 郑莉JAVA语言程序设计l当一个类对象被塑型为其父类后,它提供的方法会当一个类对象被塑型为其父类后,它提供的方法会减少减少当Manager对象被塑型为Employee之后,它只能接收getName()及getE
22、mployeeNumber()方法,不能接收getSalary()方法将其塑型为本来的类型后,又能接收getSalary()方法了5.2.2 塑型的应用塑型的应用塑型36清华大学 郑莉JAVA语言程序设计5.2.3 方法的查找方法的查找l如果在塑型前和塑型后的类中都提供如果在塑型前和塑型后的类中都提供了相同的方法,如果将此方法发送给了相同的方法,如果将此方法发送给塑型后的对象,那么系统将会调用哪塑型后的对象,那么系统将会调用哪一个类中的方法一个类中的方法?实例方法的查找类方法的查找塑型37清华大学 郑莉JAVA语言程序设计l从对象创建时的类开始,沿类层次向上查从对象创建时的类开始,沿类层次向上
23、查找找 Manager manManager man=new Manager();=new Manager();Employee emp1Employee emp1=new Employee();=new Employee();Employee emp2Employee emp2=(Employee)man;=(Employee)man;putePay();.computePay();/调用调用EmployeeEmployee类中的类中的computePay()computePay()方法方法 putePay();.computePay();/调用调用ManagerManager类中的类中的c
24、omputePay()computePay()方法方法 putePay();.computePay();/调用调用ManagerManager类中的类中的computePay()computePay()方法方法 5.2.3 方法的查找方法的查找 实例方法的查找实例方法的查找塑型38清华大学 郑莉JAVA语言程序设计l总是在引用变量声明时所属的类中进行查总是在引用变量声明时所属的类中进行查找找 Manager manManager man=new Manager();=new Manager();Employee emp1Employee emp1=new Employee();=new Emp
25、loyee();Employee emp2Employee emp2=(Employee)man;=(Employee)man;manman.expenseAllowance();/in Manager.expenseAllowance();/in Manager emp1emp1.expenseAllowance();/in Employee.expenseAllowance();/in Employee emp2emp2.expenseAllowance();/in Employee!.expenseAllowance();/in Employee!5.2.3 方法的查找方法的查找 类方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 清华大学 java 课件
限制150内