第10章 抽象类和接口.ppt
《第10章 抽象类和接口.ppt》由会员分享,可在线阅读,更多相关《第10章 抽象类和接口.ppt(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第10章章 抽象类和接口抽象类和接口10.1引言10.2抽象类10.3日历类Calendar和公历类GregorianCanlendar10.4接口10.5将基本数据类型值处理为对象10.6基本类型和包装类之间的自动转换10.1 引言引言抽象类:将父类设计得非常抽象,让它包含所有子类的共同属性、方法,以至于它没有具体的实例。接口:实现多重继承10.2 抽象类抽象类l存在意义存在意义抽象类是类层次中较高层次的概括,抽象类的作用是让其他类来继承它的抽象化的特征抽象类中可以包括被它的所有子类共享的公共行为抽象类中可以包括被它的所有子类共享的公共属性在程序中不能用抽象类作为模板来创建对象;在用户生成
2、实例时强迫用户生成更具体的实例,保证代码的安全性l抽象类的格式抽象类的格式abstract class 类名类名 l抽象方法的语法形式为抽象方法的语法形式为abstract(.);l抽象方法的优点抽象方法的优点隐藏具体的细节信息,所有的子类使用的都是相同的方法头,其中包含了调用该方法时需要了解的全部信息强迫子类完成指定的行为,规定其子类需要用到的“标准”行为通用程序设计(一般程序设计)例例1问:抽象类问:抽象类GeometricObject中的中的抽象方法可否删除?抽象方法可否删除?l各种图形都需要实现绘图方法各种图形都需要实现绘图方法,可在抽象父类中声明一个可在抽象父类中声明一个draw抽象
3、方法抽象方法abstractclassGraphicObjectintx,y;voidmoveTo(intX,intY).abstractvoiddraw();l然后在每一个子类中重写然后在每一个子类中重写draw方法,例如:方法,例如:classCircleextendsGraphicObjectvoiddraw().classRectangleextendsGraphicObjectvoiddraw().publicclassTestpublicstaticvoidmain()GraphicObjectob1=Cirlce();GraphicObjectob2=Cirlce();ob1.d
4、raw();ob2.draw();例例2l将所有图形的公共属性及方法抽象到抽象类将所有图形的公共属性及方法抽象到抽象类Shape。再将。再将2D及及3D对象的特性分别抽取出来,形成两个抽象类对象的特性分别抽取出来,形成两个抽象类TwoDimensionalShape及及ThreeDimensionalShape2D图形包括Circles、Triangles、Rectangles和Squares3D图形包括Cube、Sphere、或Tetrahedron在UML中,抽象类的类名为斜体斜体,以与具体类相区别ShapeCircleTriangleRectangleSquareTwoDimension
5、alShapeThreeDimensionalShapeCubeSphereTetrahedron例例3LoanLeaseMortgageHouseLoanCarLoanl贷款贷款(Loan)分为许多种类,如租借分为许多种类,如租借(Lease)、抵押抵押(Mortgage)、房屋贷款房屋贷款(HouseLoan)、汽车贷款汽车贷款(CarLoan)等等l将将Loan声明为抽象类,并指定所有的子类对象都应具有的行声明为抽象类,并指定所有的子类对象都应具有的行为,如计算月还款值为,如计算月还款值(calculateMonthlyPayment),还款还款(makePayment),取得客户信息取
6、得客户信息(getClientInfo),其中前两其中前两个因贷款种类不同计算方法也不同,可声明为抽象方法,个因贷款种类不同计算方法也不同,可声明为抽象方法,Loan的所有子类都必须对这两个抽象方法进行重写的所有子类都必须对这两个抽象方法进行重写publicabstractclassLoanpublicabstractfloatcalculateMonthlyPayment();publicabstractvoidmakePayment(floatamount);publicClientgetClientInfo()例例4l注意注意:1抽象类前需加修饰符abstract2不能使用new方法进行
7、实例化,故,抽象类必须被继承3抽象类可包含常规类能够包含的任何东西,例如构造方法等非抽象方法,其构造方法在子类的构造方法中调用4没有抽象方法的类也可被声明为抽象类5包含抽象方法的类必须声明为抽象类6若子类没有实现父类的全部抽象方法,它也必须声明为抽象类7抽象方法必须是非静态的,子类中的实现也必须是非静态的,否则无法覆盖8即便父类是具体类,子类也可能是抽象类9抽象类虽然无法用new实例化,但可以用作数据类型例:抽象类x;抽象类a5=new抽象类5;x=new子类();ai=new子类();10.3 日历类日历类Calendar和公历和公历类类GregorianCanlendar10.4 接口接口
8、1.Java不支持多重继承,是为了使语言本身结构简单,层次清不支持多重继承,是为了使语言本身结构简单,层次清楚,易于管理,更安全可靠,避免冲突。但同时也就限制了楚,易于管理,更安全可靠,避免冲突。但同时也就限制了语言的功能。语言的功能。2.为了在实际应用中借助多重继承的功能,共享一些公用的常为了在实际应用中借助多重继承的功能,共享一些公用的常量和一些常用的方法,量和一些常用的方法,Java使用接口来弥补。使用接口来弥补。一个类可以实一个类可以实现多个接口,达到多重继承的效果现多个接口,达到多重继承的效果。3.接口可以看作是接口可以看作是常量常量和和没有实现的方法没有实现的方法的集合。的集合。4
9、.接口与抽象类相似,接口中的方法只是做了声明,而没有定接口与抽象类相似,接口中的方法只是做了声明,而没有定义任何具体的操作方法。义任何具体的操作方法。声明接口的格式修饰符interface接口名/*常量*/*抽象方法*/方法自动为方法自动为public abstract变量自动为变量自动为public static finalpublicinterfaceComparablepublicintcompareTo(Object);例如packagejava.langpublicfinalclassStringextendsObjectimplementsSerializable,Comparab
10、le,CharSequencepublicintcompareTo(StringanotherString)publicclassDateextendsObjectimplementsSerializable,Cloneable,ComparablepublicintcompareTo(DateanotherDate)类java.lang.String和Java.util.Date都实现了Comparable接口右边的表达式都成立sinstanceofStringsinstanceofObjectsinstanceofCpareTo(“china”)返回0“china”.compareTo(s
11、)返回0“china”.compareTo(“japan”)返回-7publicclassMaxpublicstaticComparablemax(Comparableo1,Comparableo2)if(pareTo(o2)0)returno1;elsereturno2;应用:例如StringmaxString=(String)Max.max(s,”japan”)若Strings=“china”;应用例如P277的图a和图b问:为什么说图a更鲁棒?l接口接口与抽象类一样都是定义多个类的共同属性使抽象的概念更深入了一层,是一个“纯”抽象类,它只提供一种形式,并不提供实现允许创建者规定方法的基本
12、形式:方法名、参数列表以及返回类型,但不规定方法主体。方法自动为publicabstract也可以包含基本数据类型的数据成员,但它们都自动为publicstaticfinall接口允许我们在看起来不相干的对象之间接口允许我们在看起来不相干的对象之间定义共同行为定义共同行为l接口的作用接口的作用是面向对象的一个重要机制实现多继承,同时免除C+中的多继承那样的复杂性建立类和类之间的“协议”l把类根据其实现的功能来分别代表,而不必顾虑它所在的类继承层次;这样可以最大限度地利用动态绑定,隐藏实现细节l实现不同类之间的常量共享l接口的语法接口的语法声明格式为publicinterface接口名称exte
13、nds父接口名/方法的原型声明或静态常量接口的数据成员一定要赋初值,且此值将不能再更改,允许省略publicstaticfinal关键字接口中的方法必须是“抽象方法”,不能有方法体,允许省略publicabstract关键字接口也可以继承接口的实现l接口的实现接口的实现接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象利用接口设计类的过程,称为接口的实现,使用implements关键字语法如下public class 类名称 implements 接口名称 /*Bodies for the interface methods*/*Own data and meth
14、ods.*/l必须实现接口中的所有方法l实现接口的方法必须声明成public例例1l声明一个接口声明一个接口Shape2D,可利用它来实现二维的几何可利用它来实现二维的几何形状类形状类Circle和和Rectangle把计算面积的方法声明在接口里pi值是常量,把它声明在接口的数据成员里interfaceShape2D/声明Shape2D接口finaldoublepi=3.14;/数据成员一定要初始化publicabstractdoublearea();/抽象方法在接口的声明中,允许省略一些关键字,也可声明如下interfaceShape2Ddoublepi=3.14;doublearea();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第10章 抽象类和接口 10 抽象 接口
限制150内