Java语言程序设计第05章.ppt





《Java语言程序设计第05章.ppt》由会员分享,可在线阅读,更多相关《Java语言程序设计第05章.ppt(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5章章 继承与多态继承与多态面向对象程序设计的三大原则是封装性、继承面向对象程序设计的三大原则是封装性、继承性、多态性。对于封装性,我们实际上已通过上一性、多态性。对于封装性,我们实际上已通过上一章的叙述作了说明。在本章里,将主要介绍章的叙述作了说明。在本章里,将主要介绍JavaJava语语言在继承和多态(重点是重载)方面的特性。言在继承和多态(重点是重载)方面的特性。5.1 继承机制继承机制5.2 创建多级层次类创建多级层次类5.3 多态与重载多态与重载5.4 方法的动态调度方法的动态调度5.5 使用抽象类使用抽象类Return5.1 继承机制继承机制继承是面向对象编程技术的一块基石,因
2、为继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类。运用继承能够创建它允许创建分等级层次的类。运用继承能够创建一个通用类,该类还可以被更具体的类继承,每一个通用类,该类还可以被更具体的类继承,每个具体的类都增加一些自己特有的性质。个具体的类都增加一些自己特有的性质。5.1.1 关于继承关于继承5.1.2 使用使用super关键字关键字5.1.3 使用使用final关键字关键字Return5.1.1 关于继承关于继承 在在JavaJava术术语语中中,被被继继承承的的类类叫叫超超类类(superclasssuperclass),继继承承超超类类的的类类叫叫子子类类(subclass
3、subclass)。因因此此子子类类是是超超类类的的一一个个专专门门用用途途的的版版本本,它它继继承承了了超超类类定定义义的的所所有有实实例例变变量量和方法,并且为它自己增添了独特的元素。和方法,并且为它自己增添了独特的元素。继承一个类,只需要用继承一个类,只需要用extendsextends关键字把一个类的定关键字把一个类的定义合并到另一个中就可以了。在义合并到另一个中就可以了。在JavaJava中,只能给所创建的中,只能给所创建的每个子类定义一个超类。每个子类定义一个超类。JavaJava语言不支持多超类的继承。语言不支持多超类的继承。你可按照规定创建一个继承的层次。该层次中,一个子你可按
4、照规定创建一个继承的层次。该层次中,一个子类成为另一个子类的超类。然而,没有类可以成为它自类成为另一个子类的超类。然而,没有类可以成为它自己的超类。关于己的超类。关于“继承继承”的详细情况见教材的详细情况见教材P128132P128132页。页。Return5.1.2 使用使用super关键字关键字 任任何何时时候候一一个个子子类类需需要要引引用用它它直直接接的的超超类类,可可以以用用关关键键字字supersuper来实现。来实现。supersuper有两种通用形式。有两种通用形式。第一种调用超类的构造函数;第一种调用超类的构造函数;第二种用来访问被子类的成员隐藏的超类成员。第二种用来访问被子
5、类的成员隐藏的超类成员。下面分别介绍每一种用法。下面分别介绍每一种用法。1 1使用使用supersuper调用超类构造函数调用超类构造函数子类可以调用超类中定义的构造函数方法,用super的下面形式:super(parameter-list);这里,parameter-list定义了超类中构造函数所用到的所有参数。super()必须是在子类构造函数中的第一个执行语句。考察并分析教材P134135页的示例。Super的第二种形式,除了总是引用它所在子类的超类,它的行为有点像this。这种用法有下面的通用形式:super.member这里,member既可以是一个方法也可以是一个实例变量。Supe
6、r的第二种形式多数是用于超类成员名被子类中同样的成员名隐藏的情况。考察并分析教材P136137页的示例。2Super关键字的另外一种用法关键字的另外一种用法 3关于关于Object类类 这这里里大大致致介介绍绍一一下下ObjectObject类类。在在JavaJava中中,定定义义有有一一种种特特殊殊的的类类ObjectObject,其其他他所所有有的的类类都都是是ObjectObject的的子子类类。也也就就是是说说,ObjectObject是是所所有有其其他他类类的的超超类类。这这意意味味着着一一个个ObjectObject类类型型的的引引用用变变量量可可以以引引用用其其他他任任何何一一个
7、个类类的的对对象象。同同样样,因因为为数数组组像像类类一样执行,一样执行,ObjectObject类型变量可以引用任何数组。类型变量可以引用任何数组。ObjectObject定定义义了了下下面面的的方方法法,意意味味着着它它们们可可以以被被任任何何对对象象调调用,如教材用,如教材P137P137页表页表5-15-1所示。所示。其其中中,getClass()getClass()、notify()notify()、notifyAll()notifyAll()和和wait()wait()方方法法被被定定义义成成finalfinal。你你可可以以重重载载除除这这些些方方法法以以外外的的其其他他方方法法
8、。注注意意这这两两个个方方法法:equals()equals()和和toString()toString()。equals()equals()方方法法比比较较两两个个对对象象的的内内容容。如如果果对对象象是是相相等等的的,它它返返回回truetrue,否否则则返返回回falsefalse。toString()toString()方方法法返返回回一一个个包包含含调调用用它它的的对对象象描描述述的的字字符符串串。而而且且,该该方方法法在在对对象象使使用用println()println()输输出出时时自自动动调调用用。很很多多类类都都重重载载该该方方法法,这样做使它们生成它们创建对象类型的一个特殊
9、描述。这样做使它们生成它们创建对象类型的一个特殊描述。Return5.1.3 使用使用final关键字关键字FinalFinal关键字有三个用途:首先,它可以用来创建一个已命名的常关键字有三个用途:首先,它可以用来创建一个已命名的常量,这个用法在前一章中已介绍过。量,这个用法在前一章中已介绍过。FinalFinal的其他两个用法是用于继承的其他两个用法是用于继承中,下面分别予以介绍。中,下面分别予以介绍。1 1使用使用finalfinal阻止继承阻止继承有时候,你可能希望防止一个类被继承。做到这点只需在类声明前加final。声明一个final类含蓄的宣告了它的所有方法也都是final。你可能会
10、想到,声明一个既是abstract又是final的类是不合法的,因为抽象类本身是不完整的,它依靠它的子类提供完整的实现。下面是一个final类的例子:final class A /.class B extends A /ERROR!Cant subclass A /.正如注释所说明的,B继承A是不合法的,因为A声明成final。2 2 2 2使用使用使用使用finalfinalfinalfinal阻止重载阻止重载阻止重载阻止重载Return尽管方法重载(本章后面将会介绍)是Java的一个最强大的特性,有些时候也可能希望防止它的发生。不接受方法被重载,在方法前定义final修饰符。声明成fina
11、l的方法不能被重载。下面的程序段阐述了final的用法。class A final void meth()System.out.println(This is a final method.);class B extends A void meth()/ERROR!Cant override.System.out.println(Illegal!);其中,由于meth()被声明成final,它不能被B重载,如果你试图这样做,将会生成一个编译时错误。5.2 创建多级层次类创建多级层次类到目前为止,我们已经用到了只含有一个超到目前为止,我们已经用到了只含有一个超类和一个子类的简单类层次结构。同时,
12、我们也类和一个子类的简单类层次结构。同时,我们也可以如自己所愿建立包含任意多层继承的类层次可以如自己所愿建立包含任意多层继承的类层次结构。结构。5.2.1 多级层次的类多级层次的类5.2.2 何时调用构造函数何时调用构造函数Return5.2.1 5.2.1 多级层次的类多级层次的类多级层次的类多级层次的类前面提到过,用一个子类作为另一个类的超类是完全可行的。例前面提到过,用一个子类作为另一个类的超类是完全可行的。例如,给定三个类如,给定三个类A A、B B和和C C。C C是是B B的一个子类,而的一个子类,而B B又是又是A A的一个子类。的一个子类。当这种类似的情形发生时,每个子类继承它
13、的所有超类的属性。在此当这种类似的情形发生时,每个子类继承它的所有超类的属性。在此情况下,情况下,C C继承继承B B和和A A的所有方面。为理解多级层次的用途,考察教材的所有方面。为理解多级层次的用途,考察教材P139141P139141页的示例程序。在该程序中,子类页的示例程序。在该程序中,子类BoxWeightBoxWeight用作超类来创用作超类来创建一名为建一名为ShipmentShipment的子类。的子类。ShipmentShipment继承了继承了BoxWeightBoxWeight和和BoxBox的所有特的所有特征,并且增加了一个名为征,并且增加了一个名为costcost的成
14、员,该成员记录了运送这样一个小的成员,该成员记录了运送这样一个小包的费用。包的费用。由由该该示示例例可可知知,ShipmentShipment可可以以利利用用原原先先定定义义好好的的BoxBox和和BoxWeightBoxWeight类类,仅仅为为自自己己增增加加特特殊殊用用途途的的其其他他信信息息。这这体体现现了了继继承承的的部部分分价价值值:它它允允许许代代码码重重用用。同同时时该该例例子子还还说说明明了了另另外外一一点点:super()super()总总是是引引用用子子类类最最接接近近的的超超类类的的构构造造函函数数。ShipmentShipment中中super()super()调调用
15、用了了BoxWeightBoxWeight的的构构造造函函数数。BoxWeightBoxWeight中中的的super()super()调调用用了了BoxBox中中的的构构造造函函数数。在在类类层层次次结结构构中中,如如果果超超类类构构造造函函数数需需要要参参数数,那那么么不不论论子子类类自自己己需需不不需需要要参参数数,都都必必须向上传递这些参数。须向上传递这些参数。Return5.2.2 5.2.2 何时调用构造函数何时调用构造函数何时调用构造函数何时调用构造函数类层次结构创建以后,组成层次结构的类的构造函数以怎样的顺类层次结构创建以后,组成层次结构的类的构造函数以怎样的顺序被调用?举个例
16、子来说,给定一个名为序被调用?举个例子来说,给定一个名为B B的子类和超类的子类和超类A A,是,是A A的构造的构造函数在函数在B B的构造函数之前调用,还是情况相反?回答是在类层次结构中,的构造函数之前调用,还是情况相反?回答是在类层次结构中,构造函数以派生的次序调用,从超类到子类。而且,尽管构造函数以派生的次序调用,从超类到子类。而且,尽管super()super()必须必须是子类构造函数的第一个执行语句,无论你用到了是子类构造函数的第一个执行语句,无论你用到了super()super()没有,这个没有,这个次序不变。如果次序不变。如果super()super()没有被用到,每个超类的默
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 语言程序设计 05

限制150内