2022年抽象类和接口2.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 抽象 接口
- 资源描述:
-
第10章抽象类和接口1学习目标u设计并使用抽象类(10.2).u使用Calendar类和GregorianCalendar类处理日历(10.3).u声明接口来模拟弱继承关系(10.4).u使用Comparable接口定义自然顺序(10.4.1).u了解抽象类与接口的异和同(10.4.2).u声明自定义接口(10.4.3).u(可选)使用Cloneable接口克隆对象(10.4.4).u使用包装类(Byte,Short,Integer,Long,Float,Double,Character,andBoolean)将基本类型数据值包装为对象(10.5).u(可选)使用BigInteger类和BigDecimal类计算大量具有任意精度的数(10.5.6).u创建一般的排序方法(10.5).u使用JDK1.5基本数据类型与包装类之间的自动转化功能简化程序设计(10.6).u(可选GUI)处理GUI事件(10.7).2TheabstractModifierF抽象类CannotbeinstantiatedShouldbeextendedandimplementedinsubclassesF抽象方法Methodsignaturewithoutimplementation3来自第9章4抽象类GeometricObjectCircleRectangle5注非抽象类不能包涵抽象方法,如果一个抽象父类的子类不能实现所有的抽象方法,它必须声明为抽象的。换句话说,在一个由抽象类扩展出来的非抽象类中,所有的抽象方法都必须实现,即使这个子类不使用它们。还要注意抽象方法是非静态的。6注抽象类不能用new操作符实例化,但仍然可以定义它的构造方法,这种构造方法将在它子类的构造方法中调用。例如,GeometricObject的构造方法在Circle类和Rectangle类中调用。7注包含抽象方法的类必须是抽象的,但是,允许声明没有抽象方法的抽象类。这种情况下,不能使用new操作符创建类的实例,这种类用于定义新子类。8注子类可以声明为抽象的,即使它的定义是具体的。例如,Object类是具体的,但是它的子类,如GeometricObject,可以是抽象的。9注不能用new操作符创建抽象类的实例,但是,抽象类可以用作数据类型。因此,下面的话句是正确的,它创建了一个元素是GeometricObject.类型中的数组。GeometricObjectgeo=newGeometricObject10;11举例:使用GeometricObject类F对象:创建两个几何对象,一个圆和一个矩形。调用equalArea方法检查两个对象是否有相同的面积,调用displayGeometricObject方法显示这些对象。TestGeometricObjectRun12日历Calendar类和公历类GregorianCalendar13日历Calendar类和公历类GregorianCalendar一个java.util.Date实例表示以毫秒为单位的时刻。java.util.Calendar是一个抽象的父类,可以分解出日历的详细信息,比如年、月、日、时、分和秒等。Calendar类的子类可以实现特定的日历系统,如公历(Gregorian历)阴历和Jewish历等。目前,java支持公历类。14公历类GregorianCalendar使用GregorianCalendar()可以利用当前时间构造一个默认的GregorianCalendar对象,使用newGregorianCalendar(year,month,date)可以利用指定的年year、月month和日date构造一个GregorianCalendar对象。参数month是0计算的,即0就是1月(January)。15定义在Calendar类中get的方法定义在Calendar类中的get(intfield)方法用来提取给定时间域的值,时间域定义为常量,如YEAR、MONTH、DATE、HOUR(12小时制),HOUR_OF_DAY(24小时制),MINUTE,、SECOND、DAY_OF_WEEK(当前的天数,星期日是1),DAY_OF_MONTH(当前月的天),DAY_OF_YEAR(当前年的天数,1是一年的第一天),WEEK_OF_MONTH(当前月内的星期数),andWEEK_OF_YEAR(当前年内的星期数).例如,下述代码:16OptionalPathYoumaycoverChapter12,“GUIBasics”,andChapter13,“Graphics,”now.SeetheChapterDependencyChart.17接口接口(interface)是一种与类相似的结构,只包含常量和抽象方法。接口在许多方面与抽象类相近,但是抽象除了包含常量和抽象方法外,还可以包含变量和具体方法。为了区分接楼和类,Java采用下述语法声明接口:publicinterfaceInterfaceNameconstantdeclarations;methodsignatures;18接口是特殊的类在Java中,接口被认为是特殊的类。就像通常的类一样,每个接口编译为独立的字节码文件。与抽象类相似,不能使用new操作符创建接口的实例,但是大多数情况下,使用接口或多或少有点像使用抽象类。例如,可以使用接口作为变量的数据类型或转换的结果,等等。19定义接口假如设计一个要求两个对象中较大者的一般方法。对象可以是学生、圆或矩形。因为不同类型对象的比较方法不同,需要定义一个一般方法来判断两个对象的大小顺序,然后,调整这个方法来比较学生、圆或矩形。例如,可以用学生的ID号作为比较学生的键值,半径作为比较矩形的键值。可以用接口定义一个一般方法compareTo,如下所示:20StringandDateClassesJava类库中的许多类(e.g.,StringandDate)实现Comparable接口,定义对象的自然顺序。如果查看这些类的源代码,会发现这些类中使用了关键字implements,如下所示:newString()instanceofStringnewString()instanceofComparablenewjava.util.Date()instanceofComparable22GenericmaxMethod从max方法返回值是Comparable类型的,所以,需要将其显示地转换为String或Data类型。23DeclaringClassestoImplementComparableYoucannotusethemaxmethodtofindthelargeroftwoinstancesofRectangle,becauseRectangledoesnotimplementComparable.However,youcandeclareanewrectangleclassthatimplementsComparable.Theinstancesofthisnewclassarecomparable.LetthisnewclassbenamedComparableRectangle.ComparableRectangleComparableRectanglerectangle1=newComparableRectangle(4,5);ComparableRectanglerectangle2=newComparableRectangle(3,6);System.out.println(Max.max(rectangle1,rectangle2);24接口与抽象类可以像使用抽象类一样使用接口,但是,声明接口与声明抽象类有所不同。Eachmethodinaninterfacehasonlyasignaturewithoutimplementation;anabstractclasscanhaveconcretemethods.变量构造方法方法抽象类无限制子类通过构造方法链调用构造方法,抽象类不能用new操作符实例化。无限制接口所有变量必须是publicstaticfinal没有构造方法。接楼不能用new操作符实例化.所有方法必须是publicabstract的实例方法25Interfacesvs.AbstractClasses,cont.在接口中,所有的数据域都是public final static和所有的方法都是public abstract的。由于这个原因,Java可以忽略这些修饰符。因此,如下的声明是等价的:接口中的常量能用下面的方式访问:接口名.常量名(e.g.,).26Interfacesvs.AbstractClasses,cont.SupposethatcisaninstanceofClass2.cisalsoaninstanceofObject,Class1,Interface1,Interface1_1,Interface1_2,Interface2_1,andInterface2_2.所有的类型共享同一个根Object类,但接口没有共同的根。与类相似,接口也可以定义一个类型。一个接口类型的变量可以引用任何实现该接口的类的实例。如果一个类实现了一个接口,这个接口就类似于该类的一个父类。可以将接口当作一个数据类型使用,能够将接口类型的变量转换到它的子类,翻过来也可以。27警告:冲突接口在少数情况下,一个类可以实现有冲突信息的两个接口(例如两个接口的常量有不同的值,或两个方法有相同的头标志但返回类型不同)。这种类型的错误由编译器检测。28如何使用一个接口和一个类?抽象类和接口都可以用于模拟共同特征。在什么情况下应该使用接口,什么情况下应该使用类呢?一般来说,强是一种关系明显地描述了父子关系应该用泪模拟。例如,职员是一个人,所以,职员和人的关系应该用类继承模拟。弱是一种关系也称为类属关系,只对像拥有某种属性。弱是一种关系可以用接口来模拟。例如,所有的字符串都是课比较的,所以,string类实现Comparable接口。如果需要多重继承,也可以使用接口避开单重继承的限制。在多重继承情况下,只能将一类实际为父类,其他的设计为接口。更多的讨论参见第114章29创建自定义接口publicinterfaceEdible/*Describehowtoeat*/publicStringhowToEat();classAnimalclassChickenextendsAnimalimplementsEdiblepublicStringhowToEat()returnFryit;classTigerextendsAnimalclassabstractFruitimplementsEdibleclassAppleextendsFruitpublicStringhowToEat()returnMakeapplecider;classOrangeextendsFruitpublicStringhowToEat()returnMakeorangejuice;30classChickenextendsAnimalimplementsEdible,Comparable int weight;public Chicken(intweight)this.weight=weight;publicStringhowToEat()returnFryit;publicintcompareTo(Objecto)returnweight(Chicken)o).weight;ImplementsMultipleInterfaces31CreatingCustomInterfaces,cont.publicinterfaceEdible/*Describehowtoeat*/publicStringhowToEat();publicclassTestEdiblepublicstaticvoidmain(Stringargs)Objectobjects=newTiger(),newChicken(),newApple();for(inti=0;iobjects.length;i+)showObject(objectsi);publicstaticvoidshowObject(Objectobject)if(objectinstanceofEdible)System.out.println(Edible)object).howToEat();32可克隆接口Cloneablepackagejava.lang;publicinterfaceCloneable标记接口:空的接口.标记接口不包含常量或方法,它用于表明一个类具有某些必备的属性一个实现Cloneable接口的类就标记为可复制的,它的对象就可以使用Object类中定义的Clone()方法进行克隆。33例子Java库中许多类(e.g.,DateandCalendar)实现Cloneable.这样,这些类的实现就能克隆。例如,下述代码Calendarcalendar=newGregorianCalendar(2003,2,1);CalendarcalendarCopy=(Calendar)calendar.clone();System.out.println(calendar=calendarCopyis+(calendar=calendarCopy);System.out.println(calendar.equals(calendarCopy)is+calendar.equals(calendarCopy);显示calendar=calendarCopyisfalsecalendar.equals(calendarCopy)istrue34实现Cloneable接口的自定义若要声明一个实现cloneable接口的自定义类,该类必须覆盖Object类中的clone()方法。程序清单10-4声明一个名为House的类,它实现Cloneable接口和Comparable接口。House35Shallowvs.DeepCopyHousehouse1=newHouse(1,1750.50);Househouse2=(House)house1.clone();36包装类FBooleanFCharacterFShortFByteFIntegerFLongFFloatFDouble注:包装类的名称与对应的基本类型名称一样,打一个字母大写。Integer和Character例外。37toString,equals和hashCode方法每一个包装类覆盖在Object类中定义的toString,equals和hashCode方法因为所有的数值包装类和Character类实现Comparable接口,所以这些类中都实现了compareTo方法。38数值包装类每个数值包装类都实现抽象方法doubleValue,floatValue,intValue,longValue,shortValue,和byteValue.,它们定义在Number类中。这些方法将对象“转换”为基本类型的值。doubleValue,floatValue,intValue,longValue都是抽象的。byteValueandshortValue的方法不是抽象的,它们仅仅返回(byte)intValue()和(short)intValue(),respectively.39TheIntegerandDoubleClasses40TheIntegerClassandtheDoubleClassF构造函数F包装类常量MAX_VALUE,MIN_VALUEF转换方法41数值包装类的构造方法包装对象既可以用基本数据类型的值来构造,也可以用表示数值的字符串来构造。Integer类和Double类的构造方法如下:publicInteger(intvalue)publicInteger(Strings)publicDouble(doublevalue)publicDouble(Strings)42数值包装类的常量每一个数值包装类都有常量MAX_VALUE和MIN_VALUE.MAX_VALUE表示对应基本数据类型的最大值.对于Byte,Short,Integer,和Long,MIN_VALUE表示对应基本类型byte,short,int,和long的最小值。对Float和Double类,MIN_VALUE表示float和double型的最小值.下列显示的整数(2,147,483,647)的最大值,正浮点数的最小值(1.4E-45),双精确度浮点数的最大值43转换方法每个数值包装类都实现抽象方法doubleValue,floatValue,intValue,longValue,和shortValue,它们定义在Number类中.这些方法将对象“转换”为基本类型的值。44静态方法valueOf数值包装类有一个有用的类方法valueOf(Strings).该方法创建一个新的对象,并将它初始化为指定字符串表示的值。例如::DoubledoubleObject=Double.valueOf(12.4);IntegerintegerObject=Integer.valueOf(12);45将字符串转换为数值的方法已经使用过Integer类中的parseInt方法,把数值字符串转换为int值,并且使用过Doube类中的parseDouble方法,把数值字符串转变为double值。每个数值包装类都有两个覆盖的方法,将数值字符串转换为史丹过多数,它们以10(十进制)或指定值为基数(如2为二进制,8为八进制,16为十六进制),这些方法如下:46举例:对一个对象数组排序Objective:对一个可比较对象数组进行排序。这些对象是接口Comparable实例,并且可以使用compareTo方法进行比较。GenericSortRun47提示在类中.Java提供一个排序对象数组的静态方法ort,约定数组中的元素是比较的。这样,可以用下面的代码对例子中的数组进行排序:java.util.Arrays.sort(intArray);java.util.Arrays.sort(doubleArray);java.util.Arrays.sort(charArray);java.util.Arrays.sort(stringArray);48注数组是对象,一个数组是Object类的一个实例。此外,如果A是B的子类,那么A的任何实例也是B的实例。所以,下面语句的值是true:newint10instanceofObjectnewGregorianCalendar10instanceofCalendar;newCalendar10instanceofObjectnewCalendar10instanceofObject49警告尽管int型的值可以赋给double型的变量,但是int和double是两个不兼容的类型。所以,不能把一个int数组赋给double型变量或Object型变量。50LetthisnewclassbenamedComparableRectangle.在Java中,接口被认为是特殊的类。GeometricObject假如设计一个要求两个对象中较大者的一般方法。packagejava.不能用new操作符创建抽象类的实例,但是,抽象类可以用作数据类型。publicinterfaceEdible/*Describehowtoeat*/publicStringhowToEat();publicInteger(intvalue)CreatingCustomInterfaces,cont.Calendarcalendar=newGregorianCalendar(2003,2,1);包装对象既可以用基本数据类型的值来构造,也可以用表示数值的字符串来构造。publicstaticvoidmain(Stringargs)使用包装类(Byte,Short,Integer,Long,Float,Double,Character,andBoolean)将基本类型数据值包装为对象(10.Optionalpath:sort(intArray);NOTEtoInstructorOptionalpath:YoumaycoverChapter14,“Event-DrivenProgramming,”orChapter21,“Generics,”now52处理GUI事件Sourceobject(e.g.,button)Listenerobjectcontainsamethodforprocessingtheevent.HandleEventRunOptionalGUI53TraceExecutionpublicclassHandleEventextendsJFramepublicHandleEvent()OKListenerClasslistener1=newOKListenerClass();jbtOK.addActionListener(listener1);publicstaticvoidmain(Stringargs)classOKListenerClassimplementsActionListenerpublicvoidactionPerformed(ActionEvente)System.out.println(OKbuttonclicked);1.Startfromthemainmethodtocreateawindowanddisplayitanimation54TraceExecutionpublicclassHandleEventextendsJFramepublicHandleEvent()OKListenerClasslistener1=newOKListenerClass();jbtOK.addActionListener(listener1);publicstaticvoidmain(Stringargs)classOKListenerClassimplementsActionListenerpublicvoidactionPerformed(ActionEvente)System.out.println(OKbuttonclicked);animation2.ClickOK55TraceExecutionpublicclassHandleEventextendsJFramepublicHandleEvent()OKListenerClasslistener1=newOKListenerClass();jbtOK.addActionListener(listener1);publicstaticvoidmain(Stringargs)classOKListenerClassimplementsActionListenerpublicvoidactionPerformed(ActionEvente)System.out.println(OKbuttonclicked);animation3.ClickOK.TheJVMinvokesthelistenersactionPerformedmethod56展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




2022年抽象类和接口2.ppt



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/5455502.html