第8章动物类派生继承与多态优秀PPT.ppt

上传人:石*** 文档编号:65721178 上传时间:2022-12-06 格式:PPT 页数:30 大小:2.62MB
返回 下载 相关 举报
第8章动物类派生继承与多态优秀PPT.ppt_第1页
第1页 / 共30页
第8章动物类派生继承与多态优秀PPT.ppt_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《第8章动物类派生继承与多态优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第8章动物类派生继承与多态优秀PPT.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第8 8章动物类派生继承与章动物类派生继承与多态多态现在学习的是第1页,共30页能力目标能力目标:理解类的继承,能编写类及其派生子类。理解多态含义,理解上转型对象,能在子类中重写父类的同名方法。能运用继承与多态编写人类派生学生类、动物类派生马类等程序。现在学习的是第2页,共30页内容介绍8.1 任务预览8.2 继承与派生8.3 用protected声明受保护成员8.4 关键字super8.5 类类型变量赋值8.6 多态性8.7 本章小结8.8 实训8:人类派生与动物类派生现在学习的是第3页,共30页8.1 任务预览 本章实训程序运行结果:现在学习的是第4页,共30页8.2 继承与派生继承与派

2、生 计算机世界与自然界一样,类之间也有继承和派生关系。运用继承与派生能达到代码重用、简化编程的目的。语法:public abstract final class 子类名子类名 extends 父类父类 .类的单一继承关系形成了清晰的层次结构,树状图如下:现在学习的是第5页,共30页【例8-1】编写人类。再编写继承人类的学生类,学生类还拥有学号字段和学习方法。构造人类和学生类的对象,输出有关信息。class Human1 /人类protected String name;protected char sex;protected int age;public Human1(String name,

3、char sex,int age)this.name=name;this.sex=sex;this.age=age;public void think()/思考方法 System.out.println(name+在思考.);现在学习的是第6页,共30页class Pupil1 extends Human1 /继承人类的学生类protected String stuNo;/学号public Pupil1(String stuNo,String name,char sex,int age)super(name,sex,age);this.stuNo=stuNo;public void learn

4、()/学习方法 现在学习的是第7页,共30页public class Example1 public static void main(String args)Human1 person=new Human1(林冲,男,30);person.think();System.out.println();Pupil1 aPupil=new Pupil1(001,李明,男,6);aPupil.think();aPupil.learn();现在学习的是第8页,共30页8.3 用用protected声明受保护成员声明受保护成员 关键字protected可修饰类的字段和方法,这些成员能被所有派生子类直接或间

5、接继承。protected修饰的类成员,还能被类所在的包访问。在例8-1中,使用了关键字protected修饰人类Human1的name、sex和age字段。虽然protected可以修饰字段,但类的封装性要求除了final常量字段外,其它字段一律应为private。故不可滥用protected修饰字段。现在学习的是第9页,共30页【例8-2】按照类封装性要求改写例8-1,以保证字段为private。class Human2 private String name;private char sex;private int age;public Human2(String name,char s

6、ex,int age)protected String getName()public void think()现在学习的是第10页,共30页class Pupil2 extends Human2 private String stuNo;public Pupil2()public void learn()public class Example2 public static void main(String args)Human2 person=new Human2(林冲,男,30);person.think();Pupil2 aPupil=new Pupil2(001,李明,男,6);aP

7、upil.think();aPupil.learn();现在学习的是第11页,共30页 8.4 8.4 关键字关键字supersuper8.4.1 用super调用父类构造方法 类如果没有显式声明构造方法,则自动生成无参数的默认构造方法。类如果没有显式声明构造方法,则自动生成无参数的默认构造方法。子子类类不不继继承承父父类类的的构构造造方方法法,因因此此,子子类类如如果果想想使使用用父父类类的的构构造造方方法法,必必须须在在子子类类的的构构造造方方法法中中使使用用,并并且且必必须须使使用用关关键键字字super来表示,而且来表示,而且super必须是子类构造方法中的头一条语句。必须是子类构造方

8、法中的头一条语句。【例8-3】编程,验证执行子类构造方法会自动调用父类的构造方法。class Human3 public Human3()System.out.println(构造了一个人);现在学习的是第12页,共30页class Pupil3 extends Human3 public Pupil3()/super();/相当于执行了本语句System.out.println(构造了一个学生);public class Example3 public static void main(String args)Pupil3 pupil=new Pupil3();Student现在学习的是第1

9、3页,共30页8.4.2 用super访问父类字段和方法 除了调用父类构造方法外,super还可在子类中指代父类对象,用于:访问被子类隐藏的父类字段,调用被子类覆盖的父类方法。使用形式:super.父类字段名 super.父类方法名(可选实参表)现在学习的是第14页,共30页1 1、成员的隐藏、成员的隐藏 对于子类可以从父类继承的成员变量,只要子类中声明对于子类可以从父类继承的成员变量,只要子类中声明的成员变量和父类中的成员变量同名时,子类就隐藏了继的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量;子类自己声明定义的方法与父类方法同名承的成员变量;子类自己声明定义的方法与父类方法

10、同名是指子类重新声明定义的这个成员方法。是指子类重新声明定义的这个成员方法。现在学习的是第15页,共30页2、子类通过重写可以隐藏已继承的实例方法。、子类通过重写可以隐藏已继承的实例方法。1重写的语法规则重写的语法规则 如果子类可以继承父类的某个实例方法,那么子类如果子类可以继承父类的某个实例方法,那么子类就有权利重写这个方法。就有权利重写这个方法。方法重写方法重写是指:子类中定义一个方法,这个方法的类是指:子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型子类型,并且

11、这个方法的名字、参数个数、参数的类型和父类的方法完全相同。和父类的方法完全相同。2重写的目的重写的目的 子类通过方法的重写可以隐藏继承的方法,子类通过方子类通过方法的重写可以隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行法的重写可以把父类的状态和行为改变为自身的状态和行为。为。Bank现在学习的是第16页,共30页 8.5 类类型变量赋值类类型变量赋值8.5.1 子类对象的上转型对象 子类由父类派生,可把子类对象赋给父类声明的变量。如:Human human=new Pupil();或者:Human human;Pupil pupil=new Pupil();hu

12、man=pupil;现在学习的是第17页,共30页这种由父类变量引用的子类对象就是上转型对象。特征:(1)上转型对象不能操作子类新增的成员字段和成员方法。(2)上转型对象能使用父类被继承或重写的成员方法、被继承或隐藏的成员变量。(3)如果子类重写了父类的方法,则上转型对象调用该方法时一定是重写后的方法(多态性)。(4)如果子类重新定义了父类的同名字段,即隐藏了父类的字段,则上转型对象访问该字段时必定是父类本身的字段。现在学习的是第18页,共30页【例8-4】编程,测试子类对象的上转型对象以及还原后的子类对象。例8-4现在学习的是第19页,共30页8.5.2 子类变量不能引用父类对象 父类对象没

13、有下转型对象。父类对象不能直接赋值给子类变量,子类变量不能直接引用父类对象。如果一定要引用,则必须使用强制类型转换,语法:(类型名)变量比如:Pupil4 pupil=(Pupil4)human;注意:并不是所有强制类型转换都能成功,例如:把马类的动物强制转换为鸟,就无法转换。无法转换时会引发异常。现在学习的是第20页,共30页8.5.3 兄弟类对象不能相互替换 如果鸟类、马类和鱼类都继承动物类,则它们是同一层次的,是兄弟(姐妹)类。显然,鸟不是马,鸟也不是鱼,因此,不能把鸟对象赋给马类或鱼类声明的变量。同一层次的兄弟类变量之间不能相互赋值,即兄弟类对象间不能相互替换。现在学习的是第21页,共

14、30页8.6 多态性多态性 类的多态性:一是类本身,二是作为父类专用于派生,三是通过实现接口而充当接口的实例类型。多态主要反映在方法重写(覆盖)和方法重载这两个方面。现在学习的是第22页,共30页8.6.1 方法重写方法重写【例8-5】编程,测试方法重写方面的多态性。class Mammal /哺乳动物类public void Shout()/呼叫方法System.out.println(不同类的动物叫声不同);class Cat extends Mammal /继承哺乳动物类的猫类public void Shout()/重写呼叫方法System.out.println(猫的叫声:喵.喵.);

15、class Dog extends Mammal /继承哺乳动物类的狗类 public void Shout()/重写呼叫方法 System.out.println(狗的叫声:汪.汪.);现在学习的是第23页,共30页class Tiger extends Mammal /继承哺乳动物类的虎类public void Shout()/重写呼叫方法System.out.println(虎的叫声:吼.吼.);public class Example5 public static void main(String args)Mammal animal;animal=new Cat();animal.S

16、hout();animal=new Dog();animal.Shout();animal=new Tiger();animal.Shout();现在学习的是第24页,共30页8.6.2 方法重载方法重载 方法重载:在一个类中定义多个同名但签名不同的方法。例如两数相加方法add(a,b),参数类型组合有4种(多态):整整、整实、实整、实实,因此可定义4个同名但参数类型不同的方法(详见第3章3.5节“方法签名与方法重载”的例3-2)。现在学习的是第25页,共30页8.7 本章小结 类的继承与派生是一对互逆关系。类是单一继承单一继承的,最顶层是根类Object。protected主要作用是声明能被

17、所有派生子类继承的成员。关键字super与超(父)类相关,可以调用超类构造方法,也可访问被子类隐藏的父类字段,或调用重写的父类方法。把子类对象赋给父类声明的变量,就变成了上转型对象。但子类变量不能引用父类对象,兄弟类对象也不能相互替换。关于多态性,主要表现在方法重写和方法重载上。前者涉及到两个类,属于运行时多态,也叫动态多态性动态多态性。而方法重载则是在一个类内部,属于编译时多态,也叫静态多态性。静态多态性。它们的共同点是方法名相同。现在学习的是第26页,共30页8.8 实训8:人类派生与动物类派生(1)编程,编写人类Human,有私有的姓名、性别和年龄字段,定义获取各个私有字段的受保护方法,

18、再定义公共的构造方法和思考方法。编写继承人类的学生类Pupil,有私有的学号字段以及获取该字段的受保护方法,还有公共的构造方法和学习方法。再编写继承学生类的大学生类Student,有公共的构造方法、自学方法和输出数据方法。最后设计一个入口主类,构造若干个大学生,把他们的数据和行为列举出来。现在学习的是第27页,共30页(2)编程,测试多态:先编写动物类Animal,成员有:类名常量字段,私有的消息字段,公共的构造方法,公共的获取和设置消息方法、呼吸方法和行走方法。再分别编写继承动物类的鸟类Bird、马类Horse和鱼类Fish,均重新定义类名常量字段以隐藏继承的字段,重写父类的行走方法。最后编写一个入口主类,依次构造Animal类的各个上转型对象,调用其行走等方法,看是否会得到不同的结果。现在学习的是第28页,共30页作业:定义一个图形父类,包含求面积的方法,扩展子类圆、矩形、三角形等类,分别求面积。现在学习的是第29页,共30页谢谢!返回目录返回目录 结束放映结束放映现在学习的是第30页,共30页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁