Java程序设计任务驱动式教程 任务九 子承父业(继承和多态的使用)

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

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

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

资源描述

主编:孙修东、王永红高职高专规划示范教材北京航空航天大学出版社2/36目录任务一搭建环境(构建Java集成开发环境)任务二Java欢迎你(开发简单Java应用程序任务三小试牛刀(学习Java语言基础)任务四挑战选择(使用分支控制流程)任务五游戏人生(使用循环控制流程)任务六回归自然(创建、使用类和对象)任务七3G时代的消息传递(定义和使用类方法)任务八保护你的隐私(封装的使用)任务九子承父业(继承和多态的使用)任务十上帝万能之手(接口的使用)3/36任务十一用数组存储信息(使用数组)任务十二使用字符串进行交流(使用字符串)任务十三防患于未然(捕获并处理异常)任务十四主动出击(抛出异常)任务十五认识JavaApplet(Applet入门)任务十六丰富多彩的Applet(在Applet中播放声音和显示图像)任务十七进入Windows世界(设计图形用户界面)任务十八布局规划(使用布局管理器)任务十九事件委托处理(如何处理事件)任务二十选择之道(使用选择控件和选择事件)目录4/36任务二十一简明清晰的菜单(使用菜单和其他常用事件)任务二十二访问数据(使用JDBC连接数据库)任务二十三访问数据升级(数据库编程)任务二十四文件管理(目录与文件管理)任务二十五顺序进出之道(文件的顺序访问)任务二十六随机进出之道(文件的随机访问)任务二十七JAVA的分身术(创建和启动线程)任务二十八线程的生命周期与优先级(线程的状态与调度)任务二十九基于连接的通信(Java中的套接字Socket)任务三十基于无连接的通信(Java中的数据报编程)目录5/36任务九子承父业(继承和多态的使用)21知识目标能力目标继承的概念;继承关键字;父类与子类之间的关系,super关键字。多态的概念;静态多态,动态多态;多态的实现。最终类和抽象类。掌握继承的实现;掌握super关键字;掌握多态的实现。6/36内容提要4跟我做:汽车的分类关系1235实现方案代码分析必备知识动手做一做7/369.1跟我做:汽车的分类关系任务情景汽车是一般的交通工具,具有车类型、品牌、引擎数量、外观颜色等属性,能够发动、加速、刹车、停车等功能。汽车又可分为公共汽车、出租车、卡车等。公共汽车具有自己的第几路编号、最大载客数量属性,能够报站。出租车具有所属公司、最大载客数量属性,能够给乘客打发票。卡车具有最大载重量属性,能够卸货。请编写Vehicle汽车类、Bus公共汽车类。Taxi类和Truck类待学完本任务后自行完成。运行结果第1章目录8/36问题分析回忆任务六中定义类的三个步骤,先定义类名,再编写类的属性,最后编写类的方法。本任务采用这三个步骤,编写好代码后,我们很快就会发现,Vehicle汽车类和Bus公共汽车类出现了许多相同的语句代码。在属性方面,都包含了车类型、品牌、引擎数量、外观颜色重复的信息定义,在功能上都有发动、加速、刹车、停车等重复的行为定义。汽车、公共汽车的成员变量和成员方法对照请见图9-2。现在,我们换个思路考虑。汽车是一般性的概念,它包含的成员变量和成员方法,在公共汽车、出租车、卡车中也具有,因为公共汽车是一种汽车,出租车、卡车也是一种汽车,只不过公共汽车、出租车、卡车是一种更具体的汽车,除了汽车的公共特性外,还有自己的特有性质。经过分析,采取如下措施,在定义类时,将公共汽车类、出租车类、卡车类中相同的属性和方法抽象出来,集中放在汽车类中,形成一种共享的机制,公共汽车类、出租车类、卡车类中只放自己特有的成员变量和成员方法,减少重复代码。这样的汽车类称为父类,公共汽车类、出租车类、卡车类称为子类。子类继承父类的非私有成员变量和成员方法。第1章目录9.2实现方案9/36解决步骤1.打开Eclipse,在study项目中创建包com.task09,再确定类名Vehicle,得到类的框架。packagecom.task09;publicclassVehicle{}2.然后,进行类的属性描述,只输入抽象出来的共有的成员变量Stringtype;Stringbrand;intengineNum;Stringcolor;3.接着,定义类的构造方法:publicVehicle()publicVehicle(Stringtype,Stringbrand,intengineNum,Stringcolor)4.再定义抽象出来的共有的方法://发动、加速、刹车、停车publicvoidstart()publicvoidaccelerate()publicvoidbrake()publicvoidstop()9.2实现方案10/365.定义Bus类。Bus类作为更具体的子类,只定义自己特有的性质。父类Vehicle类已有的成员变量和成员方法不再定义。publicclassBusextendsVehicle{//加上extends关键字和父类名Vehicle//公共汽车具有自己的最大载客数量、第几路编号属性intmaxLoad;//特有的成员变量StringbusNo;/***构造方法*/publicBus()……publicBus(intmaxLoad,StringbusNo)……//报站publicvoidannounceBusStop()//特有的成员方法……}6.定义VehicleTest测试类,运行程序。对Vehicle类、Bus类的继承关系进行测试,Bus类能否访问父类的成员变量,能否调用父类的成员方法。Busbus=newBus(子类公共汽车,女神,2,白色,50,9路);bus.start();//调用父类的成员方法bus.announceBusStop();//公共汽车报站9.2实现方案11/36程序代码见书上源码第1章目录9.3代码分析12/369.3代码分析应用扩展Bus类继承了Vehicle类后,在发动、加速、刹车、停车功能上加上自己的特性,就要重写这四个方法。重写形成了多态。Bus类升级新增方法如下://发动、加速、刹车、停车publicvoidstart(){System.out.println(type+busNo+brand+engineNum+引擎+color+汽车发动);}publicvoidaccelerate(){System.out.println(type+busNo+brand+engineNum+引擎+color+汽车加速);}publicvoidbrake(){System.out.println(type+busNo+brand+engineNum+引擎+color+汽车刹车);}publicvoidstop(){System.out.println(type+busNo+brand+engineNum+引擎+color+汽车停车);}第1章目录13/369.4必备知识9.4.1类的继承1.继承的概念由一个已有类定义一个新类,称为新类继承了已有类。已有类称为父类,新类称为子类。例如,汽车类是父类,公共汽车类、出租车类、卡车类是子类。通过子类继承父类,子类具有父类的一般特性,包括非私有的属性和行为。子类还可以增加自身特性,定义新的属性和行为,甚至可以重新定义父类中的属性和方法,扩展类的功能。例如,汽车类具有车类型、品牌、引擎数量、外观颜色,能够发动、加速、刹车、停车等一般特性。作为子类的公共汽车类、出租车类、卡车类继承了父类的这些特性,另外,新增了自己的特性,公共汽车具有自己的第几路编号、最大载客数量属性,能够报站。出租车具有所属公司、最大载客数量属性,能够给乘客打发票。卡车具有最大载重量属性,能够卸货。公共汽车类还重新定义了父类的发动、汽车公共汽车出租车卡车加速、刹车、停车功能。第1章目录汽车公共汽车出租车卡车图9-2汽车又可分为公共汽车、出租车、卡车14/36怎样判断类与类之间具有继承关系呢?汽车具有一般特性,公共汽车、出租车、卡车是一种汽车,具有更具体的特性,符合is-a关系。根据这种原则,确定汽车是父类,公共汽车、出租车、卡车是子类。父类更通用、子类更具体。再看一看人、消费者和经销商关系。人具有姓名、年龄属性,能够说话。消费者、经销商是一种人,具有姓名、年龄属性,能够说话。消费者还能够购物、付费,经销商能够进货、收费,具有更具体的特性。符合is-a关系。所以,人是父类,消费者和经销商是子类。第1章目录9.4必备知识15/362.继承的意义在定义汽车类、公共汽车类、出租车类、卡车类时,通过分析了解到,汽车类和其他车类之间的重复代码太多,具有许多相同的成员变量和成员方法,既增加了程序员的工作量,降低编程效率,也违背了Java语言的“writeonce,onlyonce”的原则。如果把所有子类中相同的代码都抽取到父类中,建立继承关系,让子类自动继承父类的属性和方法,那么子类中就省去重复代码。例如,在汽车类、公共汽车类、出租车类、卡车类建立了继承关系后,公共汽车类、出租车类、卡车类中相同的代码,包括成员变量定义和方法的定义,抽取到汽车类中,子类中不再进行重复定义,程序的有效实现代码得到复用。因此,使用继承提高代码的复用性。9.4必备知识16/363.继承的实现继承的实现分两个步骤:⑴定义父类父类可以是系统类,也可以是自定义类。如果是系统类,该步骤可以省略。在父类中只定义一些通用的属性与方法,例如:Vehicle汽车类只定义了车类型、品牌、引擎数量、外观颜色属性,以及发动、加速、刹车、停车行为。Stringtype;//车类型、品牌、引擎数量、外观颜色属性Stringbrand;intengineNum;Stringcolor;publicvoidstart()//发动、加速、刹车、停车行为publicvoidaccelerate()publicvoidbrake()publicvoidstop()9.4必备知识17/36⑵定义子类子类定义格式:[类修饰符]class子类名extends父类名{}extends关键字表示一个类继承了另一个类。例如,Bus公共汽车类继承Vehicle汽车类。publicclassBusextendsVehicle{//父类名只能有一个}然后,定义子类特有的成员变量和成员方法。例如,Bus公共汽车类作为子类,新增了自己的特性。intmaxLoad;//子类特有的属性StringbusNo;publicvoidannounceBusStop(){//报站,子类特有的方法System.out.println(busNo+公共汽车报站);}注意:一个子类只能继承一个父类,即单继承。但一个父类可以有多个子类。9.4必备知识18/36改错:下面继承定义有哪些错误?/***人(Person)具有姓名(name)、年龄属性(age),能够说话(talk)。*消费者(Customer)具有姓名(name)、年龄属性(age),能够说话(talk),还能够购物(shop)。*/publicclassPerson{Stringname;intage;publicvoidtalk(){System.out.println(name+说话);}}publicclasspersonextendsCustomer,Shop{Stringname;publicvoidtalk(){System.out.println(name+说话);}privatevoidshop(){System.out.println(name+购物);}}提示:有5个错误。9.4必备知识19/364.子类与父类的关系定义子类之后,父类与子类之间就产生了一些特殊的关系,在代码编写上会受到影响,程序员必须清楚。⑴子类自动继承父类的属性和方法,但不能继承访问权限为private的成员变量和成员方法。例如:父类Vehicle中有一私有成员变量和一私有成员方法:privateStringcolor;//父类中私有成员变量privatevoidstart()//父类中私有成员方法子类Bus中,按如下方式对父类成员变量和成员方法进行访问,将会出错。color=银

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

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

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

×
保存成功