Java程序设计应用开发教程 课件 4.2 继承与多态_第1页
Java程序设计应用开发教程 课件 4.2 继承与多态_第2页
Java程序设计应用开发教程 课件 4.2 继承与多态_第3页
Java程序设计应用开发教程 课件 4.2 继承与多态_第4页
Java程序设计应用开发教程 课件 4.2 继承与多态_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单元4

面向对象程序设计4.2继承与多态程序设计

任务4.2显示入库成品信息任务描述基于RFID的成品自动防呆出货系统中,入库系统的数据首先由仓库管理员从MES系统中导出,然后与RFID系统扫描实际成品货物上的RFID标签数据对比,符合条件,匹配的成品则可以进入RFID系统数据库中保存。成品信息类(Stock)包括成品批次号码(BatchNumber),料号(Code),LP号码(LPNumbe),数量(Qty),MES入库时间(InStockTime),其方法1返回成品入库批次信息。其方法2功能是读取成品数据的LP码(电子标签码)判断该成品是否可以入库RFID系统。入库成功的成品信息需要增加托数序号、状态、操作人员、操作时间。运行效果如图4-2所示。图4-2任务4.2运行结果知识目标理解继承的作用。理解多态的作用。熟悉super关键字。熟悉对象转换类型。能力目标能使用继承方式解决代码的冗余,提高程序的扩展性。能使用多态技术解决实际问题,提高程序的可维护性和安全性。能使用instanceof关键字判断操作数是否有继承或实现关系。素养目标要有敬业、专注、精益求精的创新科学精神。积极传承中国优秀文化;文化自信。树立课程自信;民族自信。团队意识、学会协作共赢。任务4.2显示入库成品信息生活中的继承相关知识AnimalLionLeopardWolfDog父类子类和父类之间建立一种is-a关系(如狼是动物)继承概念下的IS-A是个单向的关系

(如狼是动物,动物不一定是狼)子类子类动物类Animal属性:food食物行为:makeNoise():动物发出声音的行为eat():动物遇到食物时的行为sleep():睡眠的行为roam():不在进食或睡眠时的行为子类子类生活中的继承了解继承动物:Animal猫科动物:Felien犬科动物:Canine狮Lion豹Leopard狼Wolf狗Dog多层继承如果类Y继承类X,且类Y是类Z的父类,那么Z应该能通过IS-AX的测试。不同的类可能会有一些共同的特征和行为,这些共同的特征和行为都统一放在一个类中,它是可以被其他类所共享的。4.2.1继承

什么是继承?

了解继承子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性巴士是汽车吗?卡车是汽车吗?出租车是汽车吗?最大载客数量报站引擎数量外观颜色刹车加速汽车最大载重量卸货所属公司最大载客数量打发票属性行为继承需要符合的关系:is-a,父类更通用、子类更具体4.2.1继承

引例了解继承创建Java教师类和Python教师类,以下这个解决方案中存在着什么问题?publicclass

PythonTeacher{

privateStringname;//教师姓名

privateStringschool;//所在学校

publicPythonTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLession(){System.out.println("启动

Python3.7");System.out.println("知识点讲解");System.out.println("总结提问");}

publicvoidintroduction(){System.out.println("大家好!我是"+school+"的"+name+".");}}publicclass

JavaTeacher{privateStringname;//教师姓名privateStringschool;//所在学校publicJavaTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLession(){System.out.println("启动

Eclipse");System.out.println("知识点讲解");System.out.println("总结提问");}publicvoidintroduction(){System.out.println("大家好!我是"+school+"的"+name+".");}}

代码存在大量重复,违背了“writeonce,onlyonce”的原则4.2.1继承

改进引例中的问题

继承的实现建立继承关系,让子类继承父类的属性和方法。Java教师是教师吗?Python教师是教师吗?教师Java教师Python教师publicclassTeacher{//父类privateStringname;//教师姓名privateStringschool;//所在学校publicTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLesson(){System.out.println("知识点讲解");System.out.println("总结提问");}

publicvoidintroduction(){ System.out.println("大家好!我是"

+school+

"的"+name+"。");}}行

为姓名学校授课自我介绍属

性4.2.1继承

继承的语法在Java语言中,用extends关键字来表示一个类继承了另一个类。publicclass子类

extends

父类

{//其余代码省略}publicclass

Animal

{//其余代码省略}例如publicclassWolf

extends

Animal{//其余代码省略}父类AnimalpublicclassDog

extends

Animal{//其余代码省略}子类Wolf子类Dog4.2.1继承

改进引例中的问题

继承的实现建立继承关系,让子类继承父类的属性和方法。publicclass

JavaTeacherextendsTeacher{publicJavaTeacher(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("启动Eclipse");super.giveLesson();}}publicclassPythonTeacherextendsTeacher{publicPythonTeacher(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("启动

Python3.7");super.giveLesson();}}子类自动继承父类的属性和方法,子类中不再存在重复代码使用继承,可以有效实现代码复用Java教师类Python教师类4.2.1继承

继承的实现子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法publicclassTeacher{privateStringname;//教师姓名privateStringschool;//所在学校publicTeacher(StringmyName,StringmySchool){

=myName;this.school=mySchool;}publicvoidgiveLesson(){System.out.println("知识点讲解");System.out.println("总结提问");}publicvoidintroduction(){

System.out.println("大家好!我是"+school+"的"+name+"。");

}}publicclassJavaTeacherextends

Teacher{publicJavaTeacher(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("启动Eclipse");super.giveLesson();}}父类中的属性和方法可以被子类继承由于giveLesson()方法与父类的实现有所不同,因此重写了该方法属性的继承与隐藏当父类中的属性为public时,子类可以直接继承当父类成员声明为private时,子类继承该成员但不能直接使用,必须通过super关键字访问。当父类成员声明为protected时,子类可以继承直接使用。方法的继承与隐藏当子类中的方法与父类中方法同名时,父类方法将被覆盖

。4.2.1继承

继承的实现子类实例化对象,赋初始值public

classTest{public

static

voidmain(String[]args){PythonTeacherpt=newPythonTeacher("张平","职业大学");pt.introduction();pt.giveLesson();JavaTeacherjt=newJavaTeacher("王彬","苏工院");jt.introduction();jt.giveLesson();}}运行结果:多层的继承衍生而来的子类可以再作为父类衍生出其他的子类,形成多层的继承关系,此时最下层的衍生类,会继承到其继承关系上所有父类的属性与方法。4.2.1继承

继承的实现super关键字调用父类的构造方法:super()或者super(参数)调用父类的方法:super.方法名(参数)引用的是父类的同名变量:super.父类同名变量继承的存取控制:Java中不允许多重继承,但是却可以使用多层继承.从父类继承的私有成员,不能被子类之间使用。被final修饰的方法不能被子类重写实例,被final修饰的类不能再被继承。方法重写(方法覆盖)子类和父类的方法具有相同的名称、参数列表、返回类型。4.2.1继承

多态的概念了解多态

从字面上理解,多态就是一种类型表现出的多种状态。

多态性是面向对象编程的一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。4.2.2多态

多态的概念了解多态

从字面上理解,多态就是一种类型表现出的多种状态。

多态性是面向对象编程的一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。Animaleat()eat()Dogeat()动物类Animal属性:food食物行为:makeNoise():动物发出声音的行为eat():动物遇到食物时的行为CatRabbit4.2.2多态

多态的优点了解多态1.消除类型之间的耦合关系2.可替换性3.可扩充性4.接口性5.灵活性6.简化性4.2.2多态

为什么需要多态

深入多态在教师类的基础上,开发一个类DeanOffice代表教务部门,负责对各教师进行评估考核,评估内容包括:

1、教师自我介绍

2、教师授课publicclassDeanOffice{publicvoidjudge(JavaTeachert){roduction();t.giveLesson();}publicvoidjudge(PythonTeachert){roduction();t.giveLesson();}publicstaticvoidmain(String[]args){DeanOfficed=newDeanOffice();d.judge(newJavaTeacher("王林","苏工院"));d.judge(newPythonTeacher("张明","职业大学"));}}控制台输出4.2.2多态

为什么需要多态

深入多态在教师类的基础上,开发一个类DeanOffice代表教务部门,负责对各教师进行评估考核,评估内容包括:

1、教师自我介绍

2、教师授课publicclassDeanOffice{publicvoidjudge(JavaTeachert){roduction();t.giveLesson();}publicvoidjudge(PythonTeachert){roduction();t.giveLesson();}publicstaticvoidmain(String[]args){DeanOfficed=newDeanOffice();d.judge(newJavaTeacher("王林","苏工院"));d.judge(newPythonTeacher("张明","职业大学"));}}控制台输出4.2.2多态

为什么需要多态深入多态现在教师类,要增加一种新子类类型:DBTeacher,该子类

类型的教师专门负责教授数据库,要求如下:属性:姓名、所属学校方法:授课(启动MySQL、实施理论课授课)、自我介绍同时,教务处也负责对这类教师进行评估考核。这个解决方案有什么弊端吗每增加一种新的教师子类,都要修改教务部门的类,还需要再增加相应的judge(评估)方法,代码的可扩展性及可维护性极差第一种解决方案,需要如下两个步骤:建立DBTeacher类修改教务部门DeanOffice类,

再增加方法:judge(DBTeachert)??4.2.2多态

多态的实现第二种解决方案——使用多态publicclassDeanOffice{publicvoidjudge(Teachert

){roduction();t.giveLesson();}publicstaticvoidmain(String[]args){DeanOfficed=newDeanOffice();d.judge(newJavaTeacher("王林","苏工院"));d.judge(newPythonTeacher("张明","职业大学"));d.judge(newDBTeacher(“欧阳菲”,“经贸学院"));}}可以接收子类类型根据实际创建的对象类型调用相应方法控制台输出使用多态之后,当需要增加新的子类类型时,无需更改教务部门类,程序的可扩展性及可维护性增强4.2.2多态

多态实现的三个必要条件

多态的实现1.继承:在多态中必须存在有继承关系的子类和父类2.重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法3.向上转型:子类的引用赋给父类对象向上转型:父类父类对象=子类实例1.

父类有的方法,都可以调用,如果被子类重写了,

则会调用子类的方法。2.父类没有的方法,而子类存在,则不能调用。3.向上转型只对方法有影响,对属性没影响。属性不存在重写。向下转型:父类父类对象=子类实例向下转型之前一定要进行向上转型!否则在转型时会出现ClassCastException异常(类型转换异常–运行时异常)4.2.2多态

多态的应用对象类型引用转换表现在父类对象与子类对象之间的转型上。具体体现在:向上转型还是向下转型。轿车有两种类型:手动挡和自动挡。对于轿车而言,至少有油门踏板和刹车踏板。如果是手动挡的汽车,它会比父类轿车多一个离合踏板。请编程说明作为子类的手动挡汽车此时能否调取它自己的离合踏板?public

classCar{public

int

pedalAuto=2;//定义一个用public修饰的成员变量“自动挡汽车的踏板数”,并初始化public

int

pedalHand=3;//定义一个用public修饰的成员变量“手动挡汽车的踏板数”,并初始化public

voidstepOnGas(){System.out.println("油门踏板");}public

voidstepOnBrake(){System.out.println("刹车踏板");}}4.2.2多态

多态的应用public

classAutoCarextendsCar{

@Overridepublic

void

stepOnGas(){System.out.println("右脚踩油门踏板!");}@Overridepublic

void

stepOnBrake(){System.out.println("右脚踩刹车踏板!");}}public

classHandCarextendsCar{@Overridepublic

voidstepOnGas(){System.out.println("右脚踩油门踏板!");}@Overridepublic

voidstepOnBrake(){System.out.println("右脚踩刹车踏板!");}public

voidstepOnClutch(){System.out.println("左脚踩离合器踏板!");}}public

classTest{

public

static

voidmain(String[]args){

CarautoCar=newAutoCar();//创建父类对象autoCarSystem.out.println("自动挡汽车有"

+autoCar.pedalAuto+"块踏板。");autoCar.stepOnGas();autoCar.stepOnBrake();

CarhandCar=newHandCar();System.out.println("手挡汽车有"

+handCar.pedalHand+"块踏板。");handCar.stepOnGas();handCar.stepOnBrake();handCar.stepOnClutch();

}}向上转型是从一个较具体的类到较抽象类的转换,所以向上转型是安全的。执行向上转型时,父类对象无法调用子类独有的属性或者方法,会抛出异常。利用多态父类对象无法调用子类独有的属性及方法,可以利用反射来最终调用子类的方法及属性HandCarhandCar2=(HandCar)handCarhandCar2.stepOnClutch();向下转型动态绑定4.2.2多态

instanceof关键字当程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论