版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023/7/21第1
页注意:开始用功了!2023/7/21第2
页配合例子源代码一起使用Powerpoint制作:耿祥义张跃平继承与接口《Java程序设计教学做一体化教程》
第5章2023/7/21第3
页主要内容2023/7/21第4
页5.1子类
5.1.1核心知识
1.子类的定义
在类的声明中,通过使用关键字extends来定义一个类的子类,格式如下:
class子类名extends父类名{
…
}
例如:
classStudentextendsPeople{
…
}
把Student类定义为People类的子类、People类是Student类的父类(超类)。2.子类的继承性如果子类与父类在同一个包中,那么,子类自然地继承了父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。当子类与父类不在同一个包中时,子类只继承父类中的protected和public访问权限的成员变量作为子类的成员变量;同样,子类只继承父类中的protected和public访问权限的方法作为子类的方法。2023/7/21第5
页
5.1.2能力目标
能定义子类,并知道子类的那些成员变量或方法是从父类继承下来的。2023/7/21第6
页
5.1.3任务驱动将下列Application.5_1java中的【代码】替换为程序代码。
People.java
Student.java
UniverStudent.java
Application5_1.java程序运行效果如图5.1。2023/7/21第7
页任务小结(1)继承是一种由已有的类创建新类的机制。可以先定义一个共有属性的一般类,根据该一般类再定义具有特殊属性的子类,子类继承一般类的属性和行为,并根据需要增加它自己的新的属性和行为,子类可以让程序不必一切“从头做起”。(2)instanceof运算符是Java独有的双目运算符,其左面的操作元是对象,右面的操作元是类,当左面的操作元是右面的类或其子类所创建的对象时,instanceof运算的结果是true,否则是false。(3)如果一个类是另一个类的子类,那么UML通过使用一个实线连接两个类的UML图来表示二者之间的继承关系,实线的起始端是子类的UML图,终点端是父类的UML图,但终点端使用一个空心的三角形表示实线的结束,如图5.2。2023/7/21第8
页
5.1.4实践环节
Application5_2.java
2023/7/21第9
页5.2成员变量的隐藏和方法重写
5.2.1核心知识1.隐藏成员变量如果子类声明的成员的变量的名字和从父类继承下来的成员变量的名字相同(声明的类型可以不同),在这种情况下,子类就会隐藏掉所继承的成员变量。子类一旦隐藏了继承的成员变量,那么子类对象以及子类自己定义的方法操作与父类同名的成员变量时,就是操作子类重新声明的这个成员变量。2.方法重写(Override)
如果子类可以继承父类的某个方法,那么子类就有权利重写这个方法。
2023/7/21第10
页
5.2.2能力目标
子类通过重写方法,改变继承的行为。2023/7/21第11
页
5.2.3任务驱动将下列University.java和ImportantUniversity.java中的【代码】替换为程序代码。Application5_3.java
程序运行效果如图5.3。2023/7/21第12
页
任务
小结重写方法既可以操作继承的成员变量、调用继承的方法,也可以操作子类新声明的成员变量、调用新定义的其他方法,但无法操作被子类隐藏的成员变量和方法。需要特别注意的是,子类在重写父类的方法时,不可以降低方法的访问权限(访问权限从高到低的排列顺序是:public、protected、友好的、private.2023/7/21第13
页
5.2.4实践环节
Application5_4.java
2023/7/21第14
页5.3super关键字
5.3.1核心知识_11.用super操作被隐藏的成员变量和方法子类一旦隐藏了继承的成员变量,那么子类创建的对象就不再拥有该变量,该变量将归关键字super所拥有,同样子类一旦隐藏了继承的方法,那么子类创建的对象就不能调用被隐藏的方法,该方法的调用由关键字super负责。2.使用super调用父类的构造方法当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的某个构造方法,也就是说,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。子类在其构造方法中需使用super来调用父类的构造方法,而且super必须是子类构造方法中的头一条语句,即如果在子类的构造方法中,没有明显地写出super关键字来调用父类的某个构造方法,那么默认地有:
super();2023/7/21第15
页
5.3.1核心知识
_2classStudent{intnumber;Student(){}Student(intnumber){this.number=number;}}classUniverStudentextendsStudent{booleanisMerried;UniverStudent(intnumber,booleanb){super(number);//调用父类的构造方法Student(intnumber)isMerried=b;}}2023/7/21第16
页
5.3.2能力目标
在子类中使用super关键字调用被隐藏(覆盖)的方法。2023/7/21第17
页
5.3.3任务驱动将下列BeijingWaterUser.java中的【代码】替换为程序代码。WaterUser.java
和
Application5_5.java
程序运行效果如图5.4。2023/7/21第18
页
任务
小结(1)当super调用被隐藏的方法时,该方法中出现的成员变量就是被子类隐藏的成员变量或继承的成员变量。(2)如果类里定义了一个或多个构造方法,那么Java不提供默认的构造方法(不带参数的构造方法),因此,当在父类中定义多个构造方法时,应当包括一个不带参数的构造方法,以防子类省略super时出现错误。2023/7/21第19
页
5.3.4实践环节
Application5_6.java2023/7/21第20
页5.4final关键字
5.4.1核心知识
final关键字可以修饰类、成员变量和方法中的局部变量。1.final类可以使用final将类声明为final类。final类不能被继承,即不能有子类。finalclassA{…}2.final方法如果用final修饰父类中的一个方法,那么这个方法不允许子类重写。3.常量如果成员变量或局部变量被修饰为final的,就是常量。2023/7/21第21
页
5.4.2能力目标
掌握final关键字的用法。2023/7/21第22
页
5.4.3任务驱动将Circle.java中的【代码】替换为程序代码。
Application5_7.java
程序运行效果如图5.5。2023/7/21第23
页
任务
小结
final参数可以接受所传递值,但在方法内不容许对final参数进行写操作,即参数得到值之后,就按常量对待final参数
2023/7/21第24
页
5.4.4实践环节
A.java2023/7/21第25
页5.5对象的上转型对象
5.5.1核心知识1.上转型对象假设People类是American类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中时,比如:
2.上转型对象的特性1)上转型对象不能操作子类新增的成员变量;不能调用子类新增的方法。2)上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法。Peopleperson;person=newAmerican();或Peopleperson;AmericananAmerican=newAmerican();person=anAmerican;这时,称对象person是对象anAmerican的上转型对象。2023/7/21第26
页5.5.2能力目标
掌握怎样使用上转型对象调用子类重写的实例方法
2023/7/21第27
页
5.5.3任务驱动将下列Application5_8.java中的【代码】替换为程序代码。程序运行效果如图5.7。People.java
ChinaPeople.java
AmericanPeople.java
2023/7/21第28
页
任务
小结(1)在Aplication类的main方法中,不能让上转型对象people调用speakChinese()或voidspeakEnglish(),因为这两个方法不是子类继承或重写的方法,而是子类新增的方法。(2)如果子类重写了父类的静态方法(static修饰的方法),那么子类对象的上转型对象不能调用子类重写的静态方法,只能调用父类的静态方法。2023/7/21第29
页
5.5.4实践环节
上机调试下列代码,特别注意程序的输出结果。
Application5_9.java
2023/7/21第30
页5.6多态和抽象类
5.6.1核心知识1.多态性多态性就是指父类的某个方法被其子类重写时,可以各自产生自己的功能行为,也就是说一个类的不同子类在重写方法时可以各自产生适合其子类对象的行为。2.用上转型对象体现多态上转型对象在调用子类重写的方法时就可能具有多种形态,因为不同的子类在重写父类的方法时可能产生不同的行为。3.抽象类及抽象方法用关键字abstract修饰的类称为abstract类(抽象类)。如:abstractclassA{}
用关键字abstract修饰的方法称为abstract方法(抽象方法).1)和普通类相比,abstract类中可以有abstract方法,也可以有非abstract方法。2)对于abstract类,不能使用new运算符创建该类的对象。如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的抽象方法,给出方法体。3)可以使用abstract类声明对象,尽管不能使用new运算符创建该对象,但该对象可以成为其子类对象的上转型对象,那么该对象就可以调用子类重写的方法2023/7/21第31
页
5.6.2能力目标
掌握用抽象类的对象做上转型对象,并体现子类的多态。2023/7/21第32
页
5.6.3任务驱动将下列Application5_10.java中的【代码】替换为程序代码。Animal.java
Dog.java
Cat.java
程序运行效果如图5.8。2023/7/21第33
页
任务
小结当用上转型对象调用子类重写的方法时,具有很好通用性,因为程序不必关心子类的具体对象的名字,就可以让上转型对象调用子类体重写的方法。不允许使用static修饰abstract方法,即abstract方法必须是实例方法。不允许使用final修饰abstract类,即要允许abstract类有子类
2023/7/21第34
页
5.6.4实践环节
上机调试下列代码,注意对象car是哪些对象的上转性对象,并怎样体现多态的。Application5_11.java2023/7/21第35
页5.7接口与实现
5.7.1核心知识_11.接口的定义
使用关键字interface来定义一个接口。接口的定义和类的定义很相似,分为接口的声明和接口体,例如:
interfacePrintable{publicfinalstaticintMAX=100;publicabstractvoidadd();publicabstractfloatsum(floatx,floaty);}
接口使用关键字interface来声明自己是一个接口,格式:interface接口的名字接口体中包含常量的声明和抽象方法两部分。接口体中所有的常量的访问权限一定都是public,而且是static常量。所有的抽象方法的访问权限一定都是public,如:interfacePrintable{intMAX=100;//等价于publicfinalstaticintMAX=100;voidadd();//等价于publicabstractvoidadd();floatsum(floatx,floaty);//等价于publicabstractfloatsum(floatx,floaty);}2023/7/21第36
页
5.7.1核心知识
_22.实现接口
接口由类来实现,即由类来重写接口中的方法。一个类可以在类声明中使用关键字implements声明实现一个或多个接口。如果类实现多个接口,用逗号隔开接口名,如A类实现Printable和Addable接口:
classAimplementsPrintable,Addable如果一个非抽象类实现了某个接口,那么这个类必须重写这个接口中的所有方法。需要注意的是,由于接口中的方法一定是publicabstract方法,所以类在重写接口方法时不仅要去掉abstract修饰符、给出方法体,而且方法的访问权限一定要明显地用public来修饰。2023/7/21第37
页
5.7.2能力目标
握类怎样实现接口。2023/7/21第38
页
5.7.3任务驱动将下列Application5_12.java中的【代码】替换为程序代码
程序运行效果如图5.92023/7/21第39
页
任务
小结接口的思想在于它可以要求某些类有相同名称的方法,但方法的具体内容可以不同,即要求这些类实现接口,以保证这些类一定有接口中所声明的方法(即所谓的方法绑定)。接口在要求一些类有相同名称的方法的同时,并不强迫这些类具有相同的父类。2023/7/21第40
页
5.7.4实践环节
2023/7/21第41
页5.8接口回调
5.8.1核心知识1.接口变量接口也是Java中一种重要数据类型,用接口声明的变量称为接口变量。接口变量中可以存放实现该接口的类的实例的引用,即存放对象的引用。
接口回调就是指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口方法。实际上,当接口变量调用被类实现的接口方法时,就是通知相应的对象调用这个方法。2.接口与多态把实现接口的类的实例的引用赋值给接口变量后,该接口变量就可以回调类重写的接口方法。
由接口产生的多态就是指不同的类在实现同一个接口时可能具有不同的实现方式,那么接口变量在回调接口方法时就可能具有多种形态。2023/7/21第42
页
5.8.2能力目标
使用接口变量调用类实现的接口方法,即掌握接口回调技术。2023/7/21第43
页
5.8.3任务驱动将下列Application5_13.java中的【代码】替换为程序代码。Sound.java
SoundMachine.java
Piano.java
Violin.java
程序运行效果如图5.11。2023/7/21第44
页
任务
小结
(1)使用接口可以让程序更加容易维护和扩展,比如,在任务模版中,再增加实现Sound接口的类时,不需要修改SoundMachine类的代码。(2)在设计程序时应当根据具体的情况来确定是使用抽象类还是接口。2023/7/21第45
页
5.8.4实践环节
上机调试下列程序,注意接口回调是怎样体现多态的。
Application5_14.java
2023/7/21第46
页5.9匿名类
5.9.1核心知识_11.内部类
可以在一个类中再定义另一个类,这样的类称作当前类中的内部类,而包含内部类的类称为内部类的外嵌类。内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。RedCowForm.java内部类的类体中不可以声明类变量和类方法。内部类仅供它的外嵌类使用,其他类不可以用某个类的内部类声明对象。classRedCowForm{RedCowcow;//内部类声明对象cowRedCowForm(){cow=newRedCow(150,112);}publicvoidshowCowMess(){cow.speak();}classRedCow{//内部类的声明
StringcowName="红牛";
intheight,weight,price;RedCow(inth,intw){height=h;weight=w;}voidspeak(){System.out.println("高:"+height+"cm重:"+weight);}}//内部类结束}2023/7/21第47
页
5.9.1核心知识
_22.匿名类与子类Java允许直接使用一个类的子类的类体创建一个子类对象。例如,假设Bank是一个类,那么下列代码就是用Bank的一个子类创建对象:
newBank(){
匿名类的类体};使用匿名类时,必然是在某个类中直接用匿名类创建对象,因此匿名类一定是内部类。如果某个方法的参数是Bank类型,那么经常使用匿名类创建一个对象,并将对象的引用传递给方法的参数。例如,对于voidshowMoney(Bankbank)其中的参数bank是Bank类型,那么在调用showMoney时,可以向showMoney方法的参数bank传递一个匿名类(Bank的一个子类)的对象,例如:
voidshowMoney(newBank(){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年杭州机器人工业小镇产品认证合同
- GB/T 13609-2025天然气气体取样
- 房屋周边坡顶施工方案
- 反挖式地下室施工方案
- 墙壁开槽工程施工方案
- 楼层防护网安全施工方案
- 恩平楼顶清洗施工方案
- 盘锦市海绵城市调蓄塘施工方案
- 浇筑母线桥拆除施工方案
- 独立柱基础厂房施工方案
- 2025广东东莞市樟木头镇招聘编外聘用人员14人笔试考试参考题库及答案解析
- 2025湖北随州北星汇能产业发展有限公司招聘延期笔试考试参考题库及答案解析
- 2025年及未来5年中国猴头菇深加工行业市场调研分析及投资前景预测报告
- 2025年某气调库建设项目可行性研究报告
- 辽宁省鞍山市海城市2025-2026学年七年级上学期道德与法治11月期中
- 施工管理人员年度培训考核试卷及答案
- 水处理加药系统调试详细实施方案
- 七年级语文现代文阅读理解全套题
- 建筑工地安全管理检查清单
- 购买仓库地皮合同范本
- 2025中国人工智能医疗行业发展现状分析报告
评论
0/150
提交评论