




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章抽象类和接口,10.1引言10.2抽象类10.3日历类Calendar和公历类GregorianCanlendar10.4接口10.5将基本数据类型值处理为对象10.6基本类型和包装类之间的自动转换,10.1引言,抽象类:将父类设计得非常抽象,让它包含所有子类的共同属性、方法,以至于它没有具体的实例。接口:实现多重继承,10.2抽象类,存在意义抽象类是类层次中较高层次的概括,抽象类的作用是让其他类来继承它的抽象化的特征抽象类中可以包括被它的所有子类共享的公共行为抽象类中可以包括被它的所有子类共享的公共属性在程序中不能用抽象类作为模板来创建对象;在用户生成实例时强迫用户生成更具体的实例,保证代码的安全性,抽象类的格式abstractclass类名抽象方法的语法形式为abstract(.);抽象方法的优点隐藏具体的细节信息,所有的子类使用的都是相同的方法头,其中包含了调用该方法时需要了解的全部信息强迫子类完成指定的行为,规定其子类需要用到的“标准”行为通用程序设计(一般程序设计),例1,问:抽象类GeometricObject中的抽象方法可否删除?,各种图形都需要实现绘图方法,可在抽象父类中声明一个draw抽象方法abstractclassGraphicObjectintx,y;voidmoveTo(intX,intY).abstractvoiddraw();然后在每一个子类中重写draw方法,例如:classCircleextendsGraphicObjectvoiddraw().classRectangleextendsGraphicObjectvoiddraw().,publicclassTestpublicstaticvoidmain()GraphicObjectob1=Cirlce();GraphicObjectob2=Cirlce();ob1.draw();ob2.draw();,例2,将所有图形的公共属性及方法抽象到抽象类Shape。再将2D及3D对象的特性分别抽取出来,形成两个抽象类TwoDimensionalShape及ThreeDimensionalShape2D图形包括Circles、Triangles、Rectangles和Squares3D图形包括Cube、Sphere、或Tetrahedron在UML中,抽象类的类名为斜体,以与具体类相区别,例3,贷款(Loan)分为许多种类,如租借(Lease)、抵押(Mortgage)、房屋贷款(HouseLoan)、汽车贷款(CarLoan)等将Loan声明为抽象类,并指定所有的子类对象都应具有的行为,如计算月还款值(calculateMonthlyPayment),还款(makePayment),取得客户信息(getClientInfo),其中前两个因贷款种类不同计算方法也不同,可声明为抽象方法,Loan的所有子类都必须对这两个抽象方法进行重写publicabstractclassLoanpublicabstractfloatcalculateMonthlyPayment();publicabstractvoidmakePayment(floatamount);publicClientgetClientInfo(),例4,注意:1抽象类前需加修饰符abstract2不能使用new方法进行实例化,故,抽象类必须被继承3抽象类可包含常规类能够包含的任何东西,例如构造方法等非抽象方法,其构造方法在子类的构造方法中调用4没有抽象方法的类也可被声明为抽象类5包含抽象方法的类必须声明为抽象类6若子类没有实现父类的全部抽象方法,它也必须声明为抽象类7抽象方法必须是非静态的,子类中的实现也必须是非静态的,否则无法覆盖8即便父类是具体类,子类也可能是抽象类9抽象类虽然无法用new实例化,但可以用作数据类型例:抽象类x;抽象类a5=new抽象类5;x=new子类();ai=new子类();,10.3日历类Calendar和公历类GregorianCanlendar,10.4接口,Java不支持多重继承,是为了使语言本身结构简单,层次清楚,易于管理,更安全可靠,避免冲突。但同时也就限制了语言的功能。为了在实际应用中借助多重继承的功能,共享一些公用的常量和一些常用的方法,Java使用接口来弥补。一个类可以实现多个接口,达到多重继承的效果。接口可以看作是常量和没有实现的方法的集合。接口与抽象类相似,接口中的方法只是做了声明,而没有定义任何具体的操作方法。,声明接口的格式,修饰符interface接口名/*常量*/*抽象方法*/,方法自动为publicabstract,变量自动为publicstaticfinal,publicinterfaceComparablepublicintcompareTo(Object);,例如,packagejava.lang,publicfinalclassStringextendsObjectimplementsSerializable,Comparable,CharSequencepublicintcompareTo(StringanotherString),publicclassDateextendsObjectimplementsSerializable,Cloneable,ComparablepublicintcompareTo(DateanotherDate),类java.lang.String和Java.util.Date都实现了Comparable接口,右边的表达式都成立,sinstanceofStringsinstanceofObjectsinstanceofComparable,pareTo(“china”)返回0“china”.compareTo(s)返回0“china”.compareTo(“japan”)返回-7,publicclassMaxpublicstaticComparablemax(Comparableo1,Comparableo2)if(pareTo(o2)0)returno1;elsereturno2;,应用:例如StringmaxString=(String)Max.max(s,”japan”),若Strings=“china”;应用例如,P277的图a和图b问:为什么说图a更鲁棒?,接口与抽象类一样都是定义多个类的共同属性使抽象的概念更深入了一层,是一个“纯”抽象类,它只提供一种形式,并不提供实现允许创建者规定方法的基本形式:方法名、参数列表以及返回类型,但不规定方法主体。方法自动为publicabstract也可以包含基本数据类型的数据成员,但它们都自动为publicstaticfinal,接口允许我们在看起来不相干的对象之间定义共同行为,接口的作用是面向对象的一个重要机制实现多继承,同时免除C+中的多继承那样的复杂性建立类和类之间的“协议”把类根据其实现的功能来分别代表,而不必顾虑它所在的类继承层次;这样可以最大限度地利用动态绑定,隐藏实现细节实现不同类之间的常量共享,接口的语法声明格式为publicinterface接口名称extends父接口名/方法的原型声明或静态常量接口的数据成员一定要赋初值,且此值将不能再更改,允许省略publicstaticfinal关键字接口中的方法必须是“抽象方法”,不能有方法体,允许省略publicabstract关键字,接口也可以继承,接口的实现,接口的实现接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象利用接口设计类的过程,称为接口的实现,使用implements关键字语法如下publicclass类名称implements接口名称/*Bodiesfortheinterfacemethods*/*Owndataandmethods.*/必须实现接口中的所有方法实现接口的方法必须声明成public,例1,声明一个接口Shape2D,可利用它来实现二维的几何形状类Circle和Rectangle把计算面积的方法声明在接口里pi值是常量,把它声明在接口的数据成员里interfaceShape2D/声明Shape2D接口finaldoublepi=3.14;/数据成员一定要初始化publicabstractdoublearea();/抽象方法在接口的声明中,允许省略一些关键字,也可声明如下interfaceShape2Ddoublepi=3.14;doublearea();,例2,classCircleimplementsShape2Ddoubleradius;publicCircle(doubler)radius=r;publicdoublearea()return(pi*radius*radius);,classRectangleimplementsShape2Dintwidth,height;publicRectangle(intw,inth)width=w;height=h;publicdoublearea()return(width*height);,声明Circle与Rectangle两个类实现Shape2D接口,测试类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.56,声明接口类型的变量,并用它来访问对象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.56,多重继承Java的设计以简单实用为导向,不允许一个类有多个父类但允许一个类可以实现多个接口,通过这种机制可实现多重继承一个类实现多个接口的语法如下类修饰符class类名称implements接口1,接口2,Car类可以实现接口Insurable,Drivable,SellablepublicclassCarimplementsInsurable,Drivable,Sellable.,例3,声明Circle类实现接口Shape2D和ColorShape2D具有pi与area()方法,用来计算面积Color则具有setColor方法,可用来赋值颜色通过实现这两个接口,Circle类得以同时拥有这两个接口的成员,达到了多重继承的目的interfaceShape2D/声明Shape2D接口finaldoublepi=3.14;/数据成员一定要初始化publicabstractdoublearea();/抽象方法interfaceColorvoidsetColor(Stringstr);/抽象方法,例4,classCircleimplementsShape2D,Color/实现Circle类doubleradius;Stringcolor;publicCircle(doubler)/构造方法radius=r;publicdoublearea()/定义area()的处理方式return(pi*radius*radius);publicvoidsetColor(Stringstr)/定义setColor()的处理方式color=str;System.out.println(color=+color);,测试类publicclassMultiInterfaceTesterpublicstaticvoidmain(Stringargs)Circlecir;cir=newCircle(2.0);cir.setColor(blue);System.out.println(Area=+cir.area();输出结果color=blueArea=12.56,接口的多重扩展接口可通过扩展的技术派生出新的接口原来的接口称为基本接口(baseinterface)或父接口(superinterface)派生出的接口称为派生接口(derivedinterface)或子接口(subinterface)派生接口不仅可以保有父接口的成员,同时也可加入新成员以满足实际问题的需要实现接口的类也必须实现此接口的父接口接口扩展的语法interface子接口的名称extends父接口1,父接口2,,接口的扩展,publicinterfaceI1publicvoidm1();,publicinterfaceI2extendsI1publicvoidm2();,publicinterfaceI3publicvoidm3();,publicclassAimplementsI2,I3publicvoidm1()/implementspublicvoidm2()/implementspublicvoidm3()/implements,I1.java,I2.java,I3.java,A.java,当一个类实现多个接口时,这个类可以是多种类型的实例。如下列表达式都返回trueAa=newA();ainstanceofI1ainstanceofI2ainstanceofI3ainstanceofObjectI1i1=newA();I2i2=newA();I3i3=newA();,Cloneable接口,Java定义了Cloneable接口,任何想实现克隆功能的类必须实现该接口,同时改写从Object类继承的clone方法,并将访问属性改为public但Cloneable接口为空接口,其定义为packagejava.lang;publicinterfaceCloneable空接口称为标记接口(markupinterface)空接口唯一作用:允许用instanceof检查对象的类型:if(objinstanceofCloneable),protectednativeObjectclone()throwsCloneNotSupportedException;,Java.lang.Object类中有,classAimplementsCloneableprotectedAclone()tryreturn(A)super.clone();catch(CloneNotSupportedExceptionex)returnnull;publicclassTpublicstaticvoidmain(Strings)Aa1=newA();Aa2=a1.clone();,想用clone类A需要:(1)实现Cloneable(2)覆盖Object中的clone()方法至少是protected返回的是A,是Object的子类,也能覆盖,classAimplementsCloneableprotectedAclone()throwsCloneNotSupportedExceptionreturn(A)super.clone();publicclassTpublicstaticvoidmain(Strings)throwsCloneNotSupportedExceptionAa1=newA();Aa2=a1.clone();,classBclassAextendsBimplementsCloneableprotectedAclone()throwsCloneNotSupportedExceptionreturn(A)super.clone();publicclassTpublicstaticvoidmain(String
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全培训的特殊表现课件
- 安全培训的收获和建议课件
- 安全培训的收获与感想课件
- 家庭安全培训教学课件
- 红十字应急救护培训考试题(附答案)
- 新吴区幼儿园编外考试试题(含答案)
- 居民重大疾病待遇、救助对象、报销比例医保试题(附答案)
- DB6105T 118-2020 渭南传统小吃 大荔甑糕制作技术规程
- 2025年外贸货运面试题及答案
- 家园联系课件
- 动物疫病防治学课件
- 采石场合作协议合同范本
- 工厂临时用电作业方案
- 大学实验室物资管理办法
- 钻井液培训课件
- 外包特殊过程管理办法
- 朋友圈点赞活动方案
- 2026年中考道德与法治一轮复习:重点考点知识分类背诵提纲
- 劳动防护用品穿戴使用标准培训
- 建筑施工消防安全知识培训
- 实验室危险化学品安全培训
评论
0/150
提交评论