JAVA抽象类和接口讲义.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

抽象类和接口AbstractClassandInterface学习目标设计和使用抽象类(14.2)使用Calendar类和GregorianCalendar类处理日历(14.3)使用接口指定对象共有的行动(14.4)定义接口以及实现接口的类(14.4)使用Comparable接口定义自然顺序(14.5)使用ActionListener接口实现对象对动作事件的监听(14.6)使用Cloneable接口使对象成为可克隆的(14.7)探究抽象类和接口的相同点和不同点(14.8)使用包装类创建基本类型值对象(14.9)创建一个通用的排序方法(14.10)使用基本类型与包装类类型之间的自动转化来简化程序设计(14.11)使用BigInteger和BigDecimal类计算任意精度的大数字(14.12)设计Rational类来定义Rational类型(14.13)学习流程设计和使用抽象类1.为什么要使用抽象类?举例:几何体类、圆类和矩形类2.使用抽象类的注意点Calendar类和GregorianCalendar类处理日历接口1.接口的作用?举例:comparable接口举例:ActionListener接口匿名类对象的创建2.接口与抽象类区别抽象类AbstractClass在继承的层次结构中,随着新子类的出现,类会变得越来越明确和具体。如果从一个子类追溯到父类,父类会变得更通用,更加不明确。类的设计应该确保父类包含它的子类的共同特征。+getName():string+getBirthday():object+getGender():char+setName():void+setBirthday():void+setGender():void-name:string-birthday:object-gender:charPerson+getWorkerNo():string+getWorkDate():object+getTelephone():string+setWorkDate():void+setTelephone():void-workerNo:string-workDate:object-telephone:stringTeacher+getStudentNo():string+getEntranceDate():object+getScores():object+setScores():void-studentNo:string-entranceDate:object-scores:objectStudent讲师助教教授欧洲人亚洲人几何体GeometricObject-color:String-filled:boolean-dateCreated:java.util.Date+GeometricObject()+GeometricObject(color:String,filled:boolean)+getColor():String+setColor(color:String):void+isFilled():boolean+setFilled(filled:boolean):void+getDateCreated():java.util.Date+toString():String对几何体设计进行修改:圆形和矩形都需要求面积和周长,最好把getArea()和getPerimeter()在GeometricObject类中定义。Circle-radius:double+Circle()+Circle(radius:double)+Circle(radius:double,color:String,filled:boolean)+getRadius():double+setRadius(radius:double):void+getArea():double+getPerimeter():double+getDiameter():double+printCircle():voidRectangle-width:double-height:double+Rectangle()+Rectangle(width:double,height:double)+Rectangle(width:double,height:doublecolor:String,filled:boolean)+getWidth():double+setWidth(width:double):void+getHeight():double+setHeight(height:double):void+getArea():double+getPerimeter():double抽象类的设计11章父类与子类的设计GeometricObject-color:String-filled:boolean-dateCreated:java.util.Date#GeometricObject()#GeometricObject(color:string,filled:boolean)+getColor():String+setColor(color:String):void+isFilled():boolean+setFilled(filled:boolean):void+getDateCreated():java.util.Date+toString():String+getArea():double+getPerimeter():doubleCircle-radius:double+Circle()+Circle(radius:double)+Circle(radius:double,color:string,filled:boolean)+getRadius():double+setRadius(radius:double):void+getDiameter():doubleRectangle-width:double-height:double+Rectangle()+Rectangle(width:double,height:double)+Rectangle(width:double,height:double,color:string,filled:boolean)+getWidth():double+setWidth(width:double):void+getHeight():double+setHeight(height:double):voidThe#signindicatesprotectedmodifierAbstractclassAbstractmethodsareitalicizedMethodsgetAreaandgetPerimeterareoverriddeninCircleandRectangle.SuperclassmethodsaregenerallyomittedintheUMLdiagramforsubclasses.修改后父类与子类的设计getArea()与getPerimeter()都不能在父类中直接实现,因为实现取决于几何体的具体类型。对于这样无法实现的方法,用abstract修饰,称为抽象方法。如果类中有抽象方法,则这个类也变为抽象类,需要在类头用abstract修饰类。publicabstractclassGeometricObject{publicStringtoString(){returncreatedon+dateCreated+\ncolor:+color+andfilled:+filled;}publicabstractdoublegetArea();publicabstractdoublegetPerimeter();}抽象类及抽象方法的写法抽象类的定义1.添加abstract修饰抽象方法2.添加abstract修饰抽象类3.抽象类无法直接用new实例化对象即只能使用抽象类创建子类4.可以将抽象类的构造方法声明为protected,因为它只被子类使用。5.没有abstract抽象方法,也可以声明为抽象类子类继承抽象类的方法子类继承抽象类有两种实现方法1.实现父类中所有的抽象方法•可以用new,实例化子类的对象2.不实现父类抽象方法,则声明子类为abstract类•仍然为抽象类,无法实例化对象抽象类GeometricObject为几何对象定义了共同特征(数据和方法),并且提供了正确的构造方法。因为不知道计算几何对象的面积和周长,所以getArea()和getPerimeter()定义为抽象方法,在子类中实现。继承自抽象类的子类实现一般子类要实现父类所有的抽象方法使用抽象方法的好处可以进行动态绑定举例:写方法测试两个几何体面积是否相同。publicstaticbooleanisSameArea(GeometricObjectobj1,GeometricObjectobj2){if(obj1.getArea()==obj2.getArea())returntrue;elsereturnfalse;}如果obj2是Rectangle类,则obj2.getArea()根据动态绑定的原则,会调用Rectangle重写后的getArea方法如果getArea()没有在父类GeometricObject中定义,则无法调用GeometricObjectobj2.getArea()方法关于抽象类的几个注意点1.若类中有抽象方法,则类必须为抽象类2.抽象方法不能是静态的。即publicstaticabstractvoidmethod();是错的。3.抽象类不能使用new操作符来初始化。但抽象类可以有构造方法,在子类构造时调用4.没有抽象方法,一个类也可以声明为抽象类。这种类用于生成子类5.父类可以是具体,子类可以是抽象的。如Object是具体,但GeometricObject类是抽象的。使用系统定义的GregorianCalendar类显示日历GregorianCalendar介绍可以提取出详细的日历信息父类Calendar中有一个get(intfield)方法ConstantDescriptionTheyearofthecalendar.Themonthofthecalendarwith0forJanuary.Thedayofthecalendar.Thehourofthecalendar(12-hournotation).Thehourofthecalendar(24-hournotation).Theminuteofthecalendar.Thesecondofthecalendar.Thedaynumberwithintheweekwith1forSunday.SameasDATE.Thedaynumberintheyearwith1forthefirstdayoftheyear.Theweeknumberwithinthemonth.Theweeknumberwithintheyear.IndicatorforAMorPM(0forAMand1forPM).YEARMONTHDATEHOURHOUR_OF_DAYMINUTESECONDDAY_OF_WEEKDAY_OF_MONTHDAY_OF_YEARWEEK_OF_MONTHWEEK_OF_YEARAM_PM例:求当前时间?求当前月份的天数?求今天是星期几?接口接口是为了定义多个类(特别是不相关的类)的共同行为。与类相似,但只包含常量和抽象方法。+getName():string+getBirthday():object+getGender():char+setName():void+setBirthday():void+setGender():void-name:string-birthday:object-gender:charPerson+getWorkerNo():string+getWorkDate():object+getTeleph

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功