《《抽象类与终结类》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《抽象类与终结类》PPT课件.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第10章 抽象类与终结类抽象类与抽象方法抽象类与抽象方法终结类与终结方法终结类与终结方法定义定义Lease类及其子类类及其子类声明及使用自定义异常声明及使用自定义异常110.1 抽象类与抽象方法抽象类的定义抽象类的定义抽象类声明的语法形式:抽象类声明的语法形式:public abstract class Shape /类体 210.1 抽象类与抽象方法抽象类的定义抽象类的定义抽象类是不能使用抽象类是不能使用newnew方法进行实例化的类,即方法进行实例化的类,即没有具体实例对象的类。没有具体实例对象的类。抽象类可以包含常规类能够包含的任何东西,抽象类可以包含常规类能够包含的任何东西,包括构造方
2、法。包括构造方法。抽象类也可以包含抽象方法,这种方法只有方抽象类也可以包含抽象方法,这种方法只有方法的声明,而没有方法的实现。法的声明,而没有方法的实现。310.1 抽象类与抽象方法声明抽象类的理由声明抽象类的理由抽象类是类层次中较高层次的概括,抽象类的作抽象类是类层次中较高层次的概括,抽象类的作用是让其他类来继承它的抽象化特征;用是让其他类来继承它的抽象化特征;抽象类可以包括被它的所有子类共享的公共属性抽象类可以包括被它的所有子类共享的公共属性和行为;和行为;在程序中不能用抽象类作为模板来创建对象;在程序中不能用抽象类作为模板来创建对象;在用户生成实例时强迫用户生成更具体的实例,在用户生成实
3、例时强迫用户生成更具体的实例,保证代码的安全性。保证代码的安全性。410.1 抽象类与抽象方法抽象类举例抽象类举例如果在应用中仅仅需要如果在应用中仅仅需要CirclesCircles(圆)、(圆)、TrianglesTriangles(三角(三角形)、形)、RectanglesRectangles(四边形)和(四边形)和SquaresSquares(正方形),那(正方形),那么这些类的所有公共属性及方法可以抽象到么这些类的所有公共属性及方法可以抽象到ShapeShape类中,类中,将将ShapeShape类声明为抽象类。类声明为抽象类。510.1 抽象类与抽象方法抽象类举例抽象类举例如果还需要
4、区分如果还需要区分2D2D及及3D3D对象,则需要将对象,则需要将2D2D及及3D3D对象的特性对象的特性分别抽取出来。分别抽取出来。610.1 抽象类与抽象方法抽象方法抽象方法抽象方法声明的语法形式抽象方法声明的语法形式抽象方法体的具体实现是由当前类的不同子类抽象方法体的具体实现是由当前类的不同子类在它们各自的类声明中完成的。在它们各自的类声明中完成的。710.1 抽象类与抽象方法抽象方法抽象方法在使用抽象方法时需要注意以下几点:在使用抽象方法时需要注意以下几点:一个抽象类的子类如果不是抽象类,则它必须为父类中一个抽象类的子类如果不是抽象类,则它必须为父类中的所有抽象方法书写方法体,即重写父
5、类中的所有抽象的所有抽象方法书写方法体,即重写父类中的所有抽象方法。方法。只有抽象类才能具有抽象方法,也就是说,如果一个类只有抽象类才能具有抽象方法,也就是说,如果一个类中含有抽象方法,则必须将这个类声明为抽象类。中含有抽象方法,则必须将这个类声明为抽象类。除了抽象方法,抽象类中还可以包括非抽象方法。除了抽象方法,抽象类中还可以包括非抽象方法。810.1 抽象类与抽象方法抽象方法举例抽象方法举例贷款贷款(Loan)(Loan)分为许多种类,如租借(分为许多种类,如租借(LeaseLease)、抵押)、抵押(MortgageMortgage)、房屋贷款()、房屋贷款(HouseLoanHouse
6、Loan)、汽车贷款)、汽车贷款(CarLoanCarLoan)等。)等。910.1 抽象类与抽象方法抽象方法举例抽象方法举例可以将可以将LoanLoan声明为抽象类,并指定所有的子类对象都应声明为抽象类,并指定所有的子类对象都应具有的行为。具有的行为。1010.2 终结类与终结方法终结类终结类如果一个类被如果一个类被finalfinal修饰符所修饰和限定,说明这个类修饰符所修饰和限定,说明这个类不可能有子类,称为终结类。不可能有子类,称为终结类。被声明为被声明为finalfinal的类通常是一些有固定作用、用来完成的类通常是一些有固定作用、用来完成某种标准功能的类,这些类不能被继承,自然就不
7、能对某种标准功能的类,这些类不能被继承,自然就不能对其提供的功能进行修改。其提供的功能进行修改。JavaJava类库中提供了一些终结类,如类库中提供了一些终结类,如、。可以防止子类对父类关键方法的错误重写,增加了代码可以防止子类对父类关键方法的错误重写,增加了代码的安全性和正确性。的安全性和正确性。1110.2 终结类与终结方法终结方法举例终结方法举例1210.2 终结类与终结方法终结方法终结方法将方法声明为将方法声明为finalfinal的另一个原因是提高类的运的另一个原因是提高类的运行效率。通常,当行效率。通常,当javajava运行环境(如运行环境(如javajava解释解释器)运行方法
8、时,它将首先在当前类中查找该器)运行方法时,它将首先在当前类中查找该方法,接下来在其超类中查找,并一直沿类层方法,接下来在其超类中查找,并一直沿类层次向上查找,直到找到该方法为止。次向上查找,直到找到该方法为止。如果方法是如果方法是finalfinal的,的,javajava编译器可以将该方法编译器可以将该方法可执行字节码直接放到调用它的程序中。可执行字节码直接放到调用它的程序中。1310.3 定义Lease类及其子类LeaseLease类图类图1410.3 定义Lease类及其子类定义初始的定义初始的Lease类类 1510.3 定义Lease类及其子类定义初始的定义初始的Lease类类 1
9、610.3 定义Lease类及其子类处理日期处理日期 处理日期和时间需要处理日期和时间需要CalendarCalendar类和类和DateFormatDateFormat类。类。CalendarCalendar类通常与类通常与DateDate类一同使用,这两个类类一同使用,这两个类在在包中。包中。DateFormatDateFormat类在类在包中。包中。1710.3 定义Lease类及其子类处理日期处理日期 Calendar Calendar 包含方法和常量;包含方法和常量;DateDate实例包含实际日期值;实例包含实际日期值;DateFormatDateFormat 实例用于显示日期格式
10、。实例用于显示日期格式。1810.3 定义Lease类及其子类处理日期处理日期 创建创建 Calendar Calendar 实例实例CalendarCalendar类提供了类提供了getInstancegetInstance()()方法创建方法创建CalendarCalendar对对象,此对象表示计算机内部时钟的当前日期及时间。象,此对象表示计算机内部时钟的当前日期及时间。调用其调用其getTimegetTime方法获得包含当前系统日期的方法获得包含当前系统日期的DateDate实例。实例。1910.3 定义Lease类及其子类处理日期处理日期 CalendarCalendar类提供了名为类
11、提供了名为addadd的实例方法,使用该的实例方法,使用该方法可以设置日、月、年的值。方法可以设置日、月、年的值。2010.3 定义Lease类及其子类处理日期处理日期 使用使用CalendarCalendar类的类的setset方法创建具有特定日期的方法创建具有特定日期的DateDate实例实例 2110.3 定义Lease类及其子类处理日期:处理日期:使用使用DateFormatDateFormat类类DateFormatDateFormat类提供了名为类提供了名为LONGLONG、MEDIUMMEDIUM和和SHORTSHORT的常量,用于指定要创建的格式。的常量,用于指定要创建的格式。
12、例如,可以将例如,可以将20112011年年2 2月月2525日显示为日显示为“20112011年年2 2月月2525日日”、“2011-2-25”2011-2-25”或或“11-2-25”11-2-25”。要获得格式实例,需要调用要获得格式实例,需要调用DateFormatDateFormat的类方的类方法法getDateInstancegetDateInstance,并在参数中指定使用哪种,并在参数中指定使用哪种格式。格式。2210.3 定义Lease类及其子类处理日期:处理日期:使用使用DateFormatDateFormat类类2310.3 定义Lease类及其子类处理日期:处理日期:
13、使用使用DateFormatDateFormat类类2410.3 定义Lease类及其子类处理日期:处理日期:使用使用DateFormatDateFormat类类对对CalendarCalendar类提供的其他类提供的其他方法进行测试方法进行测试 2510.3 定义Lease类及其子类处理日期:处理日期:使用使用DateFormatDateFormat类类对对CalendarCalendar类提供的其他类提供的其他方法进行测试方法进行测试 2610.3 定义Lease类及其子类向向Lease类中添加抽象方法类中添加抽象方法 一旦一个类中包含了抽象方法,就需要将这个一旦一个类中包含了抽象方法,就
14、需要将这个类变为抽象类。类变为抽象类。2710.3 定义Lease类及其子类定义定义Lease的子类的子类BookLease LeaseLease类的子类类的子类BookLeaseBookLease增加的属性包括:增加的属性包括:termterm(租书期限)和(租书期限)和depositdeposit(押金)。(押金)。按本计费租书时,归还时如果租书期限没有超按本计费租书时,归还时如果租书期限没有超过设置的期限,则按每本过设置的期限,则按每本5 5元计,否则每超过元计,否则每超过1 1天扣除押金的天扣除押金的10%10%。2810.3 定义Lease类及其子类定义定义Lease的子类的子类Bo
15、okLease LeaseLease类的子类类的子类BookLeaseBookLease增加的属性包括:增加的属性包括:termterm(租书(租书期限)和期限)和depositdeposit(押金)。(押金)。2910.3 定义Lease类及其子类定义定义Lease的子类的子类BookLease 3010.3 定义Lease类及其子类定义定义Lease的子类的子类BookLease 3110.3 定义Lease类及其子类定义定义Lease的子类的子类BookLease 3210.3 定义Lease类及其子类定义定义Lease的子类的子类BookLease 3310.3 定义Lease类及其子
16、类定义定义Lease的子类的子类DailyLease LeaseLease的子类的子类DailyLeaseDailyLease增加的属性为增加的属性为dayNumdayNum(租用的天数)。(租用的天数)。其值可根据起始日期和终止日期来计算。其值可根据起始日期和终止日期来计算。计费按每天计费按每天元收取。元收取。3410.3 定义Lease类及其子类定义定义Lease的子类的子类DailyLease 3510.3 定义Lease类及其子类定义定义Lease的子类的子类DailyLease 3610.3 定义Lease类及其子类定义定义Lease的子类的子类DailyLease 3710.3 定
17、义Lease类及其子类测试测试BookLease类和类和DailyLease类类 3810.3 定义Lease类及其子类测试测试BookLease类和类和DailyLease类类 3910.3 定义Lease类及其子类测试测试BookLease类和类和DailyLease类类 4010.4 声明及使用自定义异常用户自定义的所有异常类都必须是用户自定义的所有异常类都必须是ExceptionException的的子类。子类。一般的声明方法如下:一般的声明方法如下:4110.4 声明及使用自定义异常定义定义DateInputException 定义一个定义一个ExceptionException的子
18、类的子类DateInputExceptionDateInputException 4210.4 声明及使用自定义异常抛出自定义异常抛出自定义异常 在在 DailyLeaseDailyLease 类中,设置结束日期时,如果结束日期类中,设置结束日期时,如果结束日期小于开始日期,则抛出日期输入无效的异常。小于开始日期,则抛出日期输入无效的异常。修改修改Lease Lease 类中的类中的setEndDatesetEndDate()()方法:方法:4310.4 声明及使用自定义异常抛出自定义异常抛出自定义异常 测试代码测试代码4410.4 声明及使用自定义异常抛出自定义异常抛出自定义异常 测试代码测
19、试代码4510.4 声明及使用自定义异常创建多个日租约对象创建多个日租约对象 批处理接受事物处理集合,然后一个个地对它批处理接受事物处理集合,然后一个个地对它们进行处理,如果成功地完成了事物处理,则们进行处理,如果成功地完成了事物处理,则显示成功消息;显示成功消息;如果出现异常,会显示异常消息,但应用程序如果出现异常,会显示异常消息,但应用程序会继续处理,直到完成批处理为止。会继续处理,直到完成批处理为止。4610.4 声明及使用自定义异常创建多个日租约对象创建多个日租约对象 4710.4 声明及使用自定义异常创建多个日租约对象创建多个日租约对象 4810.5 本章小结如果一个类中包含了抽象方法,就需要将这个类如果一个类中包含了抽象方法,就需要将这个类定义为抽象类。定义为抽象类。抽象类中除了包含抽象方法,还可以包含非抽象抽象类中除了包含抽象方法,还可以包含非抽象方法,另外,还可以拥有实例属性和实例方法。方法,另外,还可以拥有实例属性和实例方法。定义抽象类的目的是要定义其子类来实现其中的定义抽象类的目的是要定义其子类来实现其中的抽象方法,而终结类正好相反,定义终结类的目抽象方法,而终结类正好相反,定义终结类的目的是禁止定义其子类。的是禁止定义其子类。非终结类的任何类都可以扩充。非终结类的任何类都可以扩充。4950
限制150内