您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > linux/Unix相关 > Java学习课件 第5章
第5章接口与多态郑莉ProgramminginJAVA清华大学郑莉JAVA语言程序设计2目录5.1接口5.2塑型5.3多态的概念5.4多态的应用5.5构造方法与多态5.6内部类5.7本章小结清华大学郑莉JAVA语言程序设计35.1接口接口–与抽象类一样都是定义多个类的共同属性–使抽象的概念更深入了一层,是一个“纯”抽象类,它只提供一种形式,并不提供实现–允许创建者规定方法的基本形式:方法名、参数列表以及返回类型,但不规定方法主体–也可以包含基本数据类型的数据成员,但它们都默认为static和final清华大学郑莉JAVA语言程序设计45.1.1接口的作用及语法接口的作用–是面向对象的一个重要机制–实现多继承,同时免除C++中的多继承那样的复杂性–建立类和类之间的“协议”把类根据其实现的功能来分别代表,而不必顾虑它所在的类继承层次;这样可以最大限度地利用动态绑定,隐藏实现细节实现不同类之间的常量共享接口清华大学郑莉JAVA语言程序设计5接口允许我们在看起来不相干的对象之间定义共同行为5.1.1接口的作用及语法——与抽象类的不同接口清华大学郑莉JAVA语言程序设计6保险公司的例子–具有车辆保险、人员保险、公司保险等多种保险业务,在对外提供服务方面具有相似性,如都需要计算保险费(premium)等,因此可声明一个Insurable接口–在UML图中,实现接口用带有空三角形的虚线表示5.1.1接口的作用及语法——例5_1InterfaceInsurableCompanyPersonCar接口清华大学郑莉JAVA语言程序设计7接口的语法–声明格式为[接口修饰符]interface接口名称[extends父接口名]{…//方法的原型声明或静态常量}–接口的数据成员一定要赋初值,且此值将不能再更改,允许省略final关键字–接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字5.1.1接口的作用及语法接口清华大学郑莉JAVA语言程序设计8例5.1中的Insurable接口声明如下,可见其中的方法都是抽象方法publicinterfaceInsurable{publicintgetNumber();publicintgetCoverageAmount();publicdoublecalculatePremium();publicDategetExpiryDate();}5.1.1接口的作用及语法——例5_1保险接口的声明接口清华大学郑莉JAVA语言程序设计9声明一个接口Shape2D,可利用它来实现二维的几何形状类Circle和Rectangle–把计算面积的方法声明在接口里–pi值是常量,把它声明在接口的数据成员里interfaceShape2D{//声明Shape2D接口finaldoublepi=3.14;//数据成员一定要初始化publicabstractdoublearea();//抽象方法}–在接口的声明中,允许省略一些关键字,也可声明如下interfaceShape2D{doublepi=3.14;doublearea();}5.1.1接口的作用及语法——例5_2接口清华大学郑莉JAVA语言程序设计105.1.2实现接口接口的实现–接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象–利用接口设计类的过程,称为接口的实现,使用implements关键字–语法如下publicclass类名称implements接口名称{/*Bodiesfortheinterfacemethods*//*Owndataandmethods.*/}必须实现接口中的所有方法来自接口的方法必须声明成public接口清华大学郑莉JAVA语言程序设计11实现接口Insurable,声明汽车类实现例5.1中的Insurable接口,实现接口中的所有抽象方法publicclassCarimplementsInsurable{publicintgetPolicyNumber(){//writecodehere}publicdoublecalculatePremium(){//writecodehere}publicDategetExpiryDate(){//writecodehere}publicintgetCoverageAmount(){//writecodehere}publicintgetMileage(){//新添加的方法//writecodehere}}5.1.2实现接口——例5_3接口清华大学郑莉JAVA语言程序设计12对象可以被转型为其所属类实现的接口类型–getPolicyNumber、calculatePremium是Insurable接口中声明的方法–getMileage是Car类新添加的方法,Insurable接口中没有声明此方法Carjetta=newCar();Insurableitem=(Insurable)jetta;//对象转型为接口类型item.getPolicyNumber();item.calculatePremium();item.getMileage();//接口中没有声明此方法,不可以jetta.getMileage();//类中有此方法,可以((Car)item).getMileage();//转型回原类,可调用此方法了5.1.2实现接口——对象转型接口清华大学郑莉JAVA语言程序设计135.1.2实现接口——例5_4classCircleimplementsShape2D{doubleradius;publicCircle(doubler){radius=r;}publicdoublearea(){return(pi*radius*radius);}}classRectangleimplementsShape2D{intwidth,height;publicRectangle(intw,inth){width=w;height=h;}publicdoublearea(){return(width*height);}}声明Circle与Rectangle两个类实现Shape2D接口接口清华大学郑莉JAVA语言程序设计14测试类publicclassInterfaceTester{publicstaticvoidmain(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.2实现接口——例5_4运行结果接口清华大学郑莉JAVA语言程序设计15声明接口类型的变量,并用它来访问对象publicclassVariableTester{publicstaticvoidmain(String[]args){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_5接口清华大学郑莉JAVA语言程序设计16MovableObject接口定义了所有“可移动对象”能做的事情publicinterfaceMovableObject{publicbooleanstart();publicvoidstop();publicbooleanturn(intdegrees);publicdoublefuelRemaining();publicvoidchangeSpeed(doublekmPerHour);}5.1.2实现接口——MovableObject接口接口清华大学郑莉JAVA语言程序设计17Plane、Car、Train、Boat分别实现MovableObject接口publicclassPlaneimplementsMovableObject{publicintseatCapacity;publicCompanyowner;publicDatelastRepairDate;//实现MovalbelObject接口的所有方法publicbooleanstart(){//启动飞机,成功则返回true}publicvoidstop(){//停止}publicbooleanturn(intdegrees){//转向,成功则返回true}publicdoublefuelRemaining(){//返回燃料剩余量}publicvoidchangeSpeed(doublekmPerHour){//改变速度}//plane类自己的方法:publicDategetLastRepairDate(){//...}publicdoublecalculateWindResistance(){//....}}5.1.2实现接口——MovableObject接口的实现接口清华大学郑莉JAVA语言程序设计18为MovableObjects安装遥控器(remotecontrol)publicclassRemoteControl{privateMovableObjectmachine;RemoteControl(MovableObjectm){machine=m;}//按下“启动”按钮:publicvoidstart(){booleanokay=machine.start();if(!okay)display(NoResponseonstart);//...}}–remotecontrol构造方法的形参类型为MovableObject,它可以是Plane,Car,Train,Boat,等等5.1.2实现接口——RemoteControl类接口清华大学郑莉JAVA语言程序设计195.1.3多重继承多重继承–Java的设计以简单实用为导向,不允许一个类有多个父类–但允许一个类可以实现多个接口,通过这种机制可实现多重继承–一个类实现多个接口的语法如下[类修饰符]class类名称implements接口1,接口2,…{……}接口清华大学郑莉JAVA语言程序设计20Car类可以实现接口Insurable,Drivable,SellablepublicclassCarimplementsInsurable,Drivable,Sellable{....}5.1.3多重继承——Car的例子接口清华大学郑莉JAVA语言程序设计21声明Circle类实现接口Shape2D和Color–Shape2D具有pi与area()方法,用来计算面积–Color则具有setColor方法,可用来赋值颜色–通过实现这两个接口,Circle类得以同时拥有这两个接口的成员,达到了多重继承的目的interfaceShape2D{//声明Shape2D接口finaldoublepi=3.14;//数据成员一定要初始化publicabstractdoublearea();//抽象方法}interfaceColor{voidsetColor(Stringstr);//抽象方法}5.1.3多重继承——例5_6接口清华大学郑莉JAVA语言程序设计22classCircleimplementsShape2D,Color//实现Circle类{doubleradius;Stringcolor;publicCircle(doubler)//构造方法{radius=r;}publicdoublearea()
本文标题:Java学习课件 第5章
链接地址:https://www.777doc.com/doc-7028107 .html