版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、深圳职业技术学院深圳职业技术学院主讲教师:袁梅冷主讲教师:袁梅冷 2021-04-18电信学院电信学院-软件工程系软件工程系本单元教学内容使用继承改善系统类的结构使用继承改善系统类的结构类成员的继承规则类成员的继承规则子类构造器子类构造器子类对父类方法的重写子类对父类方法的重写汽车管理系统 系统是一个用于管理小轿车、客车等各类汽车系统是一个用于管理小轿车、客车等各类汽车资源的系统。资源的系统。 功能主要包括:维护、存储各类车的基本信息;功能主要包括:维护、存储各类车的基本信息;提供汽车信息列表输出等功能。提供汽车信息列表输出等功能。分析:针对系统要求,应设计哪些核心类?分析:针对系统要求,应设
2、计哪些核心类?汽车管理系统核心类 1.用于描述各种类型车信息的车类,如用于描述各种类型车信息的车类,如Car类、类、Bus类;类; 2.用于保存所有汽车基本信息的数据类。用于保存所有汽车基本信息的数据类。 分析:分析: 1。Car类与类与Bus类各有什么成员属性和方法?类各有什么成员属性和方法? 比较比较Car类与类与Bus类,发现什么异同?如果还需类,发现什么异同?如果还需要其它车类,怎么做?要其它车类,怎么做?VehicleData类 用于保存维护所有汽车基本信息; 分析VehicleData类 问题: 1. 如何保存各类车信息? 2 .分析相关的add方法和list方法,比较异同。Arr
3、ayList类的使用 ArrayList类封装了一个类封装了一个Object类型的数组,我类型的数组,我们可以使用它来维护一个们可以使用它来维护一个Object的可变长数组。的可变长数组。 ArrayList对象的创建对象的创建 public ArrayList():默认的构造器,将会以默:默认的构造器,将会以默认大小认大小16来初始化内部的数组。来初始化内部的数组。 public ArrayList(int initialCapacity):用指定:用指定的大小来初始化内部的数组。的大小来初始化内部的数组。 public ArrayList(Collection c):用一个已有:用一个已有
4、集合对象来构造数组,并将该集合的元素添加集合对象来构造数组,并将该集合的元素添加到到ArrayList的数组中。的数组中。ArrayList类的使用 ArrayList类的部分常用方法类的部分常用方法 add(Object o):在对象列表结构的最后添加对:在对象列表结构的最后添加对象元素。象元素。 add(int index, Object element):在对象列表:在对象列表指定位置插入新的对象元素。指定位置插入新的对象元素。 remove(Object o) :从对象列表中移走对象。:从对象列表中移走对象。 clear():清空列表中的所有对象元素。:清空列表中的所有对象元素。 it
5、erator():返回用于遍历对象集合的指针。:返回用于遍历对象集合的指针。 Java的循环控制结构 Java的循环语句共有三种,它们是:的循环语句共有三种,它们是: while 循环语句循环语句 for 循环语句循环语句 dowhile循环语句。循环语句。 循环结构由四个部分组成。循环结构由四个部分组成。 初始化部分初始化部分initialization):一条或多条语):一条或多条语句,用来做一些初始化的工作。句,用来做一些初始化的工作。 循环条件部分循环条件部分loop-condition):一个):一个boolean型的表达式,根据它的值来判断是否型的表达式,根据它的值来判断是否继续下
6、一次循环。继续下一次循环。 循环体部分循环体部分body):将被反复执行的代码,):将被反复执行的代码,可以是一条语句,也可以是一个语句块复合可以是一条语句,也可以是一个语句块复合语句)。语句)。 迭代部分迭代部分iteration):在一次循环结束后,):在一次循环结束后,下一次循环开始前执行的语句,通常用于修改下一次循环开始前执行的语句,通常用于修改循环条件。循环条件。Java的循环控制结构while和for循环语句对应当型结构,dowhile语句对应直到型结构。初 始 化循 环 条 件循 环 体迭 代 部 分truefalse初始化循环条件循环体迭代部分truefalse当型循环结构 直
7、到型循环结构While循环while的语法格式如下:的语法格式如下:initializationwhile (loop-condition)body;iteration;试一试:请分析下面程序段的功能,绘制其流程图,并试一试:请分析下面程序段的功能,绘制其流程图,并加以解释。加以解释。int count=1; /定义并初始化循环变量定义并初始化循环变量Iint sum=0; /定义并初始化求和结果变量定义并初始化求和结果变量sumwhile(count=100) /循环求和循环求和sum+=count; /循环体循环体count+;System.out.println(“1+2+.+100=”
8、+sum);/输出结果输出结果for循环 for 循环语句是当型结构,在几种循环语句的使循环语句是当型结构,在几种循环语句的使用中最为灵活,其语法格式如下:用中最为灵活,其语法格式如下: for (initialization;loop-condition; iteration) body; 试一试:试一试: 编写使用编写使用for循环语句实现计算循环语句实现计算1到到100的和的程的和的程序段。序段。dowhile循环语句 do-while 循环语句是直到型结构,它的语法格循环语句是直到型结构,它的语法格式如下:式如下: initialization do body; iteration;
9、while (loop-condition); 试一试:试一试: 编写使用编写使用do-while循环语句实现计算循环语句实现计算1到到100的的和的程序段。和的程序段。改善系统类结构如何有效减少如何有效减少Car类和类和Bus类代码的重复?类代码的重复?观察下图观察下图基本思路:基本思路:将将Car类与类与Bus类的共性抽象出来,上移到类的共性抽象出来,上移到Vehicle类中。类中。以以Vehicle类为基础,构建类为基础,构建Car类和类和Bus类。类。相关概念类的继承描述的是类与类之间的类的继承描述的是类与类之间的“is a ”关系,即子类关系,即子类是比父类更为特殊的类,是父类的一种
10、特例。继承机制是比父类更为特殊的类,是父类的一种特例。继承机制的优点在于为我们提供了一种类级的代码重用机制,使的优点在于为我们提供了一种类级的代码重用机制,使我们可以在现有类的基础上,通过重用、修改或添加等我们可以在现有类的基础上,通过重用、修改或添加等方法创建一个新类。方法创建一个新类。父类或基类、超类)子类或派生类)继承的Java实现 编写例编写例3-3程序程序 在在Java中使用关键字中使用关键字extends实现继承,其基实现继承,其基本语法格式为:本语法格式为: class SubClassName extends SupClassName 需要讨论二个问题:需要讨论二个问题: 1、
11、子类中有什么?类成员的继承规则是怎样的?、子类中有什么?类成员的继承规则是怎样的? 2、在继承结构中,构造器是如何处理的?如何、在继承结构中,构造器是如何处理的?如何写子类构造器方法。写子类构造器方法。类成员的继承规则 分析讨论分析讨论private成员的继承性;成员的继承性; 分析讨论分析讨论public成员的继承性;成员的继承性; 问题:如果父类的问题:如果父类的public方法是用来操作父方法是用来操作父类的私有变量呢?类的私有变量呢? 分析讨论无访问控制符修饰的成员的继承性;分析讨论无访问控制符修饰的成员的继承性; protected访问修饰符的使用访问修饰符的使用 protected
12、是专为继承而设计的访问控制修饰是专为继承而设计的访问控制修饰符符成员属性与成员方法的继承规则父类 publicdefaultprotectedprivate同一包中子类publicdefaultprotected不被继承Java成员继承规则 试一试:试一试: 编写编写Bus类的测试程序,参见类的测试程序,参见P79P80 分析:分析: Bus类中有哪些成员变量与成员方法?类中有哪些成员变量与成员方法? 如果调用从父类继承下来的公有方法?举例说如果调用从父类继承下来的公有方法?举例说明?明?子类构造器 重新思考:重新思考: 构造器的形式要求?构造器的形式要求? 构造器的作用?构造器的作用? 观察
13、分析:观察分析: Bus类与类与Car类构造器方法类构造器方法 理解子类构造器理解子类构造器 在内存机制中,父类与子类占用同一块内存,在内存机制中,父类与子类占用同一块内存,只不过子类在父类的基础上增加了自己的部分,只不过子类在父类的基础上增加了自己的部分,即子类依附于父类,先有父类再有子类。因而,即子类依附于父类,先有父类再有子类。因而,构建对象时,也要先构建父类的数据部分,再构建对象时,也要先构建父类的数据部分,再考虑子类增加的部分。考虑子类增加的部分。子类构造器 子类构造器的一般形式子类构造器的一般形式 子类类名构造器参数列表)子类类名构造器参数列表)super(与父类构造器方法参数相对
14、的实参与父类构造器方法参数相对的实参); /调用父调用父 类构造器类构造器/对子类成员的初始化对子类成员的初始化 实战演练 1编写一个矩形类编写一个矩形类Rect,该类包含:,该类包含: 两个私有属性:矩形的长两个私有属性:矩形的长length和宽和宽width。 一个构造器方法:带一个构造器方法:带2个参数的构造器方法,用个参数的构造器方法,用于对于对length和和width属性进行初始化。属性进行初始化。 两个公有成员方法:分别用于计算并返回矩形两个公有成员方法:分别用于计算并返回矩形的面积和周长。的面积和周长。实战演练 2编写一个具有确定位置的矩形类编写一个具有确定位置的矩形类Plai
15、nRect,该类继承于该类继承于Rect类,其确定位置用矩形的左上类,其确定位置用矩形的左上角坐标来标识,为该类添加:角坐标来标识,为该类添加: 两个属性:矩形左上角坐标两个属性:矩形左上角坐标startX和和startY。 两个构造器方法:两个构造器方法: (1带带4个参数的构造器方法,用于对个参数的构造器方法,用于对startX、startY、width和和height属性初始化;属性初始化; (2不带参数的构造器方法,将矩形初始化为不带参数的构造器方法,将矩形初始化为左上角坐标、长和宽都为左上角坐标、长和宽都为0的矩形;的矩形; 一个方法:方法一个方法:方法isInside(double
16、 x,double y)。用于判断某个点是否在矩形内部,如在矩形内,用于判断某个点是否在矩形内部,如在矩形内,返回返回true, 否则,返回否则,返回false。实战演练 3编写上题编写上题PlainRect类的测试程序类的测试程序 (1创建一个左上角坐标为创建一个左上角坐标为10,10),长),长为为20,宽为,宽为10的矩形对象;的矩形对象; (2计算并打印输出矩形的面积和周长;计算并打印输出矩形的面积和周长; (3判断点判断点(25.5,13)是否在矩形内,并打印是否在矩形内,并打印输出相关信息。输出相关信息。方法覆盖重写)当从父类继承下来的方法不能完全满足子类需要时,我们可以重写当从父
17、类继承下来的方法不能完全满足子类需要时,我们可以重写该方法。该方法。如:如:Bus中从中从Vehicle类中继承下来的方法类中继承下来的方法printInfo()不能输出车的不能输出车的座位数。修改座位数。修改Bus如下:如下:class Bus extends Vehicle private int numOfSeat; public Bus(String type,String brand,double price,int numOfSeat) super(type,brand,price); this.numOfSeat=numOfSeat; public void printInfo(
18、) /重写父类中的重写父类中的printInfo()()方法方法 super.printInfo(); /调用父类中的该调用父类中的该方法方法 System.out.println(座位数座位数: + numOfSeat); 方法覆盖重写) 重新运行重新运行Bus类的测试程序类的测试程序P79-P80 方法覆盖与方法重载的区别。方法覆盖与方法重载的区别。 方法重载要求:方法名相同,参数数目或参数方法重载要求:方法名相同,参数数目或参数类型不同;类型不同; 方法覆盖要求:子类的方法定义应与父类保持方法覆盖要求:子类的方法定义应与父类保持一致。即应与父类有完全相同的方法名、返回一致。即应与父类有完
19、全相同的方法名、返回值类型和参数列表,否则就不是方法的覆盖,值类型和参数列表,否则就不是方法的覆盖,而是在子类中定义了自己的与父类无关的成员而是在子类中定义了自己的与父类无关的成员方法,此外,方法的覆盖还应遵循以下规则:方法,此外,方法的覆盖还应遵循以下规则: 覆盖方法的访问控制应该与它所覆盖的方法的覆盖方法的访问控制应该与它所覆盖的方法的访问控制相同或更宽松;访问控制相同或更宽松; 覆盖方法不能比它所覆盖的方法抛出更多的异覆盖方法不能比它所覆盖的方法抛出更多的异常。常。实战演练 1 编写编写Employee类,该类包含:类,该类包含: 四个受保护属性:雇员的姓名四个受保护属性:雇员的姓名na
20、me、工号、工号number、住址、住址address和薪水和薪水salary。 一个构造器方法:用于初始化一个构造器方法:用于初始化name、number和和salary属性。属性。 两个公有成员方法:分别实现职员基本信息的两个公有成员方法:分别实现职员基本信息的输出和按比例涨工资的功能。输出和按比例涨工资的功能。实战演练 2编写编写Manager类,该类继承于类,该类继承于Employee类类 (1为其添加:为其添加: 两个属性:办公室两个属性:办公室officeID和年终分红和年终分红bonus; 一个构造器方法:带有一个构造器方法:带有4个参数的构造器方法,个参数的构造器方法,用于对除
21、用于对除bonus属性外的所有其它属性进行初属性外的所有其它属性进行初始化;始化; 方法:方法:officeID属性和属性和bonus属性的相关属性的相关set和和get方法;方法; (2重写重写Employee类中的方法类中的方法raiseSalary(double proportion),经理涨工资,经理涨工资的计算方法为在雇员工资涨幅的基础上增加的计算方法为在雇员工资涨幅的基础上增加10%的比例。的比例。实战演练 3编写编写TemporaryEmployee临时工类,临时工类,该类继承于该类继承于Employee类类 (1为其添加:为其添加: 一个属性:雇佣年限一个属性:雇佣年限hireYears; 构造器方法:用于初始化该类的所有属性;构造器方法:用于初始化该类的所有属性; 方法:方法:hireYears属性的属性的set和和get方法;方法; (2重写重写Employee类中的方法类中的方法raiseSalary(double proportion),临时工的工,临
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烯烃转换装置操作工创新实践考核试卷含答案
- 电线电缆绞制工保密意识竞赛考核试卷含答案
- 空调器装配工发展趋势强化考核试卷含答案
- 经编机操作工标准化评优考核试卷含答案
- 镗工班组安全知识考核试卷含答案
- 金属材涂层机组操作工QC管理模拟考核试卷含答案
- 水解蒸煮工岗前节能考核试卷含答案
- 人才测评师岗中常识考核试卷含答案
- 烫呢(光)挡车工岗位履职考核试卷含答案
- 锅炉(承压)设备焊工岗位安全综合考核试卷含答案
- 九师联盟2026-2027学年高三上学期10月8历史HL-G(含答案)
- 工业小区管理办法
- 2025版老旧小区集中供热改造工程合同
- 儿童OT训练课件
- 防产品造假管理制度
- 江苏海事职业测试题及答案
- 赔偿协议书合同
- 预交水电费协议合同书
- 2024民用建筑电气绿色设计应用规范
- 墓地转让协议书范本格式
- 中央2024年中国药学会招聘笔试历年典型考题及考点剖析附带答案详解
评论
0/150
提交评论