欢迎来到天天文库
浏览记录
ID:20521624
大小:1001.00 KB
页数:21页
时间:2018-10-13
《博学实训软件工程java面向对象第2章-继承和多态》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、国家信息化人才培养工程(深圳博学)授权实训基地第二章继承和多态预习检查如何继承一个类?使用继承有什么好处?使用多态有什么好处?提问本章任务任务1:使用继承实现宠物类图结构任务2:子类重写父类方法任务3:使用super调用父类成员任务4:使用多态实现宠物看病任务5:使用父类作为方法返回值掌握继承的实现方法重写多态的应用本章目标点重点难向上转型和向下转型点难点重串讲:继承说一说如下两个类有什么问题?如何优化?提问-name:String-health:int-love:int-strain:StringDog+
2、print():void+getName():String+getHealth():int+getLove():int+getStrain():String+Dog()-name:String-health:int-love:int-sex:StringPenguin+print():void+getName():String+getHealth():int+getLove():int+getSex():String+Penguin()使用继承优化设计将重复代码抽取到父类中串讲:继承使用继承修改后分析子类与
3、父类是is-a关系减少代码量方便修改代码串讲:继承使用继承编写父类编写子类,继承父类[访问修饰符]classPet{//公共的属性和方法}[访问修饰符]classDogextendsPet{//子类特有的属性和方法}继承关键字继承是Java中实现代码重用的重要手段之一。Java中只支持单根继承,即一个类只能有一个直接父类讲解:方法重写重写方法和被重写方法必须具有相同的方法名和参数列表重写方法的返回值类型必须和被重写方法的返回值类型相同或者是其子类重写方法的不能缩小被重写方法的访问权限子类重写父类方法即可(方
4、法重写:在子类中根据需求对从父类继承的方法进行重新编写)上机中,Dog或Penguin的print()需要和Pet中的print()有不同的实现,怎么办?提问注意小结方法重写与方法重载有什么区别?提问串讲:super关键字访问父类构造方法访问父类属性或方法super(参数);super代表父类对象super关键字和this关键字的作用类似,都是将被屏蔽了的成员变量、成员方法变为可见可用。super用在子类中,访问直接父类中的被屏蔽的内容,进一步提高代码的重用性和灵活性。super关键字不仅可以访问父类的构造
5、方法,还可以访问父类的成员,包括父类的属性、一般方法等,无法通过super访问private成员super.属性名/方法名();上机中,Dog或Penguin如何访问Pet的成员?提问串讲:继承时构造方法调用顺序条件顺序子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法默认先调用父类的无参构造方法子类的构造方法中通过super显式调用父类的有参构造方法将执行父类相应构造方法,而不执行父类无参构造方法子类的构造方法中通过this显式调用自身的其他构造方法
6、在相应构造方法中应用以上两条规则注意:如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止串讲:Object类Object类是所有类的父类Object类被子类经常重写的方法方法说明toString()返回当前对象本身的有关信息,按字符串对象返回equals()比较两个对象是否是同一个对象,是则返回truehashCode()返回该对象的哈希代码值getClass()获取当前对象所属的类信息,返回Class对象演示示例:重写equal
7、s()小结提问classA{publicA(){System.out.println("父类的构造方法");}}publicclassBextendsA{publicB(){System.out.println("子类的构造方法");}publicstaticvoidmain(String[]args){Bb=newB();}}控制台输出什么?常见错误集中讲解串讲:多态如下主人类中给宠物看病的方法,如果又需要给XXX宠物看病,怎么办?提问添加XXX类,继承Pet类修改主人类,添加给XXX看病的方法//给企鹅
8、看病publicvoidcure(Penguinpenguin){if(penguin.getHealth()<50){penguin.setHealth(70);System.out.println("吃药、疗养");}}//给狗看病publicvoidcure(Dogdog){if(dog.getHealth()<50){dog.setHealth(60);System.out.println("打针、吃药"
此文档下载收益归作者所有