资源描述:
《Java程序设计中文14slide.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Chapter14抽象类和接口1学习目标Todesignanduseabstractclasses(§10.2).ToprocessacalendarusingtheCalendarandGregorianCalendarclasses(§10.3).Todeclareinterfacestomodelweakinheritancerelationships(§10.4).TodefineanaturalorderusingtheComparableinterface(§10.4.1).Toknow
2、thesimilaritiesanddifferencesbetweenanabstractclassandaninterface(§10.4.2).Todeclarecustominterfaces(§10.4.3).(Optional)ToenableobjectscloneableusingtheCloneableinterface(§10.4.4).Tousewrapperclasses(Byte,Short,Integer,Long,Float,Double,Character,andBo
3、olean)towrapprimitivedatavaluesintoobjects(§10.5).(Optional)TousetheBigIntegerandBigDecimalclassesforcomputingverylargenumberswitharbitraryprecisions(§10.5.6).Tocreateagenericsortmethod(§10.5).TosimplifyprogrammingusingJDK1.5automaticconversionbetweenp
4、rimitivetypesandwrapperclasstypes(§10.6).(OptionalGUI)TohandleGUIevents(§10.7).2引言在继承的层次结构中,随着每个新子类的出现,类会变得越来越明确和具体。如果从一个子类上溯到父类,类就变得更一般更通用。类的设计应该保证父类包含子类的共同特征。有时,将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类称为抽象类。有时需要从几个类中派生出一个子类,这种能力称为多重继承。然而,Java不支持多重继承。Java的每个子类仅从
5、一个父类直接继承,这种限制称为单重继承。为得到多重继承的效果,必须使用接口。3FromChapter94AbstractClassesGeometricObjectCircleRectangle5抽象类抽象类和常规类一样具有数据和方法不能用new操作符实例化应该被继承并在子类中实现抽象方法抽象方法只有方法头,没有方法体6注非抽象类不能包含抽象方法,抽象类不一定必须包含抽象方法。也就是说,如果抽象类的子类没有实现父类的所有抽象方法,那么子类必须是抽象类。只要是抽象类,不管是否包含抽象方法,都不能用ne
6、w实例化。7注抽象类不能用new实例化,但它可以含有构造方法,这些构造方法定义为protected,因为它只被子类使用。如GeometricObject的构造方法在Circle和Rectangle类中调用。创建一个具体子类的实例时,它的父类的构造方法被调用以初始化父类中定义的成员变量。8注父类是常规类,子类可以是抽象类.如,Object类是常规类,但它的子类GeometricObject是抽象类。子类可以覆盖父类的方法,将其声明为abstract。这种方法很少用,但是当父类中方法的实现在子类中无效时
7、,就可以在子类中将该方法声明为抽象方法。9NOTE虽然不能用new实例化抽象类,但一个抽象类可以用作数据类型,例如,下面的语句是正确的。GeometricObject[]geo=newGeometricObject[10];10Example:使用GeometricObject类你可能正在考虑是否应该将抽象方法getArea和getPerimeter从GeometricObject类中删除。下面的例子展示了把它们留在GeometricObject类中的好处。TestGeometricObjectRu
8、n11抽象类Calendar和它的子类GregorianCalendar12Calendar类的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是一年的第一天),W