《类继承多态》PPT课件.ppt

上传人:牧羊曲112 文档编号:5640912 上传时间:2023-08-05 格式:PPT 页数:44 大小:280.49KB
返回 下载 相关 举报
《类继承多态》PPT课件.ppt_第1页
第1页 / 共44页
《类继承多态》PPT课件.ppt_第2页
第2页 / 共44页
《类继承多态》PPT课件.ppt_第3页
第3页 / 共44页
《类继承多态》PPT课件.ppt_第4页
第4页 / 共44页
《类继承多态》PPT课件.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《《类继承多态》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《类继承多态》PPT课件.ppt(44页珍藏版)》请在三一办公上搜索。

1、1,面向对象的程序设计,第三章 类,2,作业问题:类的成员是类对象(p145 1,3),MyRecttangle,int xUp,yUpInt xDown,yDown,MyRecttangle()MyRecttangle(int xUp,.),getW()getH()area();toString(),MyCube,MyRecttangle rectint d,MyCube(MyRecttangle rect,int d),getVolume();getSurfaceArea();,3,3.3.3子类对父类构造方法的调用 p127,子类构造函数:无参数:先调用父类无参数的构造函数;有参数:若无

2、super(参数),先调用父类无参数的构造函数;若有super(参数),不会调用父类无参数的构造函数。,4,目标,继承多态抽象类、抽象方法,5,一、类的继承,Java 最令人心动的特性就是它的代码复用了。代码复用有两种方式1、类的包含关系当一个类定义中包含另一个类的实例时,就是类的包含关系,通常称为“HAS-A(拥有A)”。2、类的继承关系在面向对象的程序设计中,“IS-A”称为继承关系。,6,HAS-A,汽车,发动机,车轮,方向盘,IS-A,水果,苹果,梨,香蕉苹果,富士苹果,7,继承(Inheritance)指一个类(Class)可以继承其它类的所有内容,包括变量和方法。被继承的类称为父类

3、或者超类(Superclass),继承后产生的类成为子类或者派生类(Subclass)。,8,继承(Inheritance)利用extends创建子类修饰符 class 子类名 extends 父类名 语句体不使用extends的继承如果没有使用extends,则该类为 的子类注意:在Java语言中,所有的类都是由Object类派生出来的,比如前面介绍的String类,以及用户自己新建的类。,表示继承关系,9,继承注意事项:Java中,每一个类只可以有一个父类,即单继承;一个类可以有多个子类。父类含有其所有子类共同的内容,每一个子类各自具有与其他子类不相同的内容。子类可以添加自己的成员变量和方

4、法,一、类的继承,Emoloyee类:name sex,Worker类:category dressAllowance,Officer类:empClass vehicle,工人类,继承了父类的姓名和性别属性外还包含类别和是否有服装津贴属性,主任类,还包含级别和是否配备交通工具属性,职员类,具有姓名和性别两个属性,10,继承中的访问权限如果父类中的变量和方法为public、protected,其子类中的这些变量和方法依然为public、protected子类不能访问父类中权限为private的实例变量和实例方法例class_extend_exsampleextend_exmanagerTestS

5、uperTestSuper.java(Empolyee.java,Manager.java),11,继承的访问权限:同一个类 同一个包 子类 全局private y default y yprotected y y ypublic y y y y,一、类的继承,12,类继承的传递性类继承具有传递性,也就是说子类具有其父类和父类的父类,一直到Object类的所有类的内容。比如,B类继承了A类,而C类又继承了B类,则C类包含A类和B类的几乎所有内容。父类成员变量的隐藏和方法的覆盖,13,子类中父类成员变量的隐藏:子类的成员变量与父类的成员变量同名,则在子类中父类中的成员变量被隐藏,当子类中的变量名

6、与父类的相同,原来的变量被遮盖;可使用super.变量名引用父类变量例class_extend_exsampleextend_exmanagerThreeClass.java,14,方法覆盖(overriding):子类中定义的方法和祖先类中某个方法同名,同参数行,(即子类可以改写父类方法所实现的功能),则父类中的该方法被覆盖。子类可使用super.方法名引用父类方法。子类中重写的方法必须与父类方法有:相同的名字、相同的参数表、相同的返回类型。,15,实例:extend_exsampleextend_ex 类的UML图,protected:被子类及同一个包内的 点(坐标x,y)其他类访问 圆(

7、圆心、半径),一、类的继承,16,例如父类:MyPoint类 public String toString()return(+x+,+y+);子类Mycirle覆盖父类的toString()方法;public String toString()return 圆心+super.toString()+;半径:+radius;/return 圆心+(+x+,+y+)+;半径:+radius;,一、类的继承,17,区分:方法重载、方法覆盖,方法的覆盖(overriding)和重载(overloading)方法的覆盖:子孙类中定义的方法和祖先类中某个方法同名,同参数行,则祖先类中的该方法被覆盖.方法的重

8、载:指一个对象的多态性,即多个方法用相同的名称,但参数行不同.,18,super:表示父类对象。p122何时使用?若子类的成员变量(或方法)名与父类的成员变量(方法)名字相同时,可使用super指明父类的成员变量或方法。使用方法(1)访问被子类隐藏的父类中的成员变量 super.成员变量(2)调用被子类覆盖的父类中的成员方法 super.成员方法(3)调用直接基类的构造方法 super(参数),一、类的继承_super,关键字 super,19,例:extend_exsampleextend_ex,setRadius();getRadius();area();toString();,MyPoi

9、nt,protected int xprotected int y,setX();getX();setY();getY();toString(),MyCircle,protected int radius,MyCircle()MyCircle(x,y,radius),MySphere,protected int z,setZ();getZ();area();volumn();toString();,MySphere()MySphere(x,y,z,radius),MyPoint()MyPoint(x,y),覆盖父类的方法toString()。,覆盖父类的方法toString(),覆盖父类的方法

10、area()。,20,public class MyPoint protected int x;/protected 保护级别,在子类中可见 protected int y;/protected 保护级别,在子类中可见 MyPoint()(调用MyPoint类的无参数构造方法);MyPoint(int x,int y)this.x=x;this.y=y;public String toString()return(+x+,+y+);,21,public class Mycircle extends MyPoint protected int radius;/圆的半径 public Mycirc

11、le()(调用Mycircle类的无参数构造方法);public Mycircle(int x,int y,int radius)/super(x,y);/调用父类有2个参数的构造方法 this.x=x;this.y=y;this.radius=radius;public double area()return Math.PI*radius*radius;public String toString()/覆盖父类的同名方法/return 圆心+(+x+,+y+)+;半径:+radius;return 圆心+super.toString()+;半径:+radius;,22,public clas

12、s MySphere extends MyCircle protected int z;public MySphere()(调用MySphere类的无参数构造方法);public MySphere(int x,int y,int z,int radius)/super(x,y,radius);/调用父类有3个整型参数的构造方法*/this.x=x;this.y=y;this.radius=radius;this.z=z;public double area()/覆盖父类的同名方法,求球的表面 return 4*Math.PI*radius*radius;public double volume

13、()/子类添加的求球的体积的方法:return 4*Math.PI*Math.pow(radius,3)/3;public String toString()/覆盖父类的同名方法,满足子类的要求 return 球心:+(+x+,+y+,+z+)+;半径:+radius;,23,思考类的构造方法的调用顺序?查看输出,public class TestMySphere public static void main(String args)MySphere obj=new MySphere();obj.setX(5);obj.setY(15);obj.setZ(25);obj.setRadius(

14、5);System.out.println(obj.toString();(球的面积:+obj.area();(球的体积:+obj.volume();,24,改变实例化方式,查看输出,public class TestMySphere public static void main(String args)MySphere obj=new MySphere(1,2,3,4);System.out.println(obj.toString();(球的面积:+obj.area();(球的体积:+obj.volume();,25,结论:实例化过程,setRadius();getRadius();ar

15、ea();toString();,MyPoint,protected int xprotected int y,setX();getX();setY();getY();toString(),MyCircle,protected int radius,MyCircle(),MySphere,protected int z,setZ();getZ();area();volumn();toString(),MySphere(),MyPoint(),TestMySphere,New MySphere(),MySphere(x,y,z,radius),MyPoint(x,y),MyCircle(x,y,

16、radius),New MySphere(1,2,3,4),MyPoint(),MyCircle(),26,在Mycircle的构造方法中使用super(x,y);在MySphere的构造方法中使用super(x,y,radius);演示结果。,27,构造方法调用顺序,Java 会让子类的构造方法自动地调用基类的构造方法。子类构造函数:无参数:先调用父类无参数的构造函数;有参数:若无super(参数),先调用父类无参数的构造函数;若有super(参数),不会调用父类无参数的构造函数。,28,继承情况下的初始化引入继承概念后初始化执行顺序:父类的static变量;子类的static变量;父类的实

17、例变量;父类的构造方法;子类的实例变量;子类的构造方法;,29,实例2 exten_super_in_oneSuperDemo UML图,Main(),30,多态是面向对象系统中的又一个重要特性。在java语言中,提供了两种多态机制:重载、重写。重载:同一个类中多个方法有相同的名字,不同的参数列表,这种情况称 为方法重载。调用时根据形参的个数和类型来决定调用的是哪个方法。返回类型不同并不足以构成方法重载。重写:子类重写父类的成员方法。子类中重写的方法必须与父类方法有:相同的名字、参数表、返回类型。Java虚拟机会根据调用这个方法的类来确定哪个方法被调用。可通过super关键字调用直属父类中被重

18、写的方法,二、多态,多态,31,重载 exten_super_in_oneAddOverriddenpublic class AddOverriddenint add(int a,int b)int add(int a,int b,int c)double add(double a,double b),重写 覆盖exten_super_in_oneOverRiddenDemo1.javaclass Avoid display()class B extends Avoid display(),二、多态,判断:println方法的声明 是重载还是覆盖?,public void println()p

19、ublic void println(boolean x)public void println(char x)public void println(int x)public void println(long x)public void println(float x)public void println(double x)public void println(char x)public void println(String x)public void println(Object x),二、多态,重载,33,exten_super_in_one 输出结果是?class father

20、void display()System.out.println(“fathers method display()called!);void print()System.out.println(“fathers method print()called!);class son extends father void display()System.out.println(“sons method display()called!);void print_b()System.out.println(“sons method print_b()called!);public class Over

21、RiddenDemo1public static void main(String args)father father=new father();father.display();father.print();father fa=new son();fa.display();/A的引用,B的方法 fa.print();,34,Java中允许父类对象和子类对象之间进行类型转换。子类对象可以自动向父类对象进行转换;但父类对象转换成子类对象时,必须要强制类型转换。Father father=new Son();father.display();/A的引用,B的方法 Son son=(Son)fat

22、her;/强制转换Java运行时多态:运行时,Java能根据引用的实例动态地选择将要运行的方法的实际版本。这是Java的运行时多态。,三、子类对象和父类对象的转换,子类与父类对象的转换,35,例3.15,MyCircle obj2=new MySphere(8,8,8,10);System.out.println(t+obj2.toString();System.out.println(t球的表面积:+obj2.area();/System.out.println(obj2.volume();/出错,obj2是圆类的引用。if(obj2 instanceof MySphere)MySphere

23、 obj3=(MySphere)obj2;/强制转换 System.out.println(obj3:球类引用);System.out.println(t球的体积:+obj3.volume();,36,抽象类和抽象方法,1、抽象方法:只有方法头、没有方法体的方法。2、抽象类:包含抽象方法的类。抽象类、抽象方法的特征:抽象类的属性和方法都是他的子类的公共属性和方法的集合抽象类不能被实例化。子类必须实现父类的所有抽象方法,否则必须仍然定义为抽象类抽象类中也存在一般方法public void show(),二、抽象类,37,声明抽象类的格式:abstract class 类名.抽象方法 格式如下:a

24、bstract 数据类型 方法名(paramlist);注意:声明格式中没有,最后的;不能省略。,抽象类的关键字,抽象方法的关键字,38,3、抽象类与抽象方法的使用 例:class_extend_exsample abstractExanimal抽象类只是预先确定了总体结构,缺少实际内容或实现过程不能被实例化,所以只能被继承以它为基类,用子类创建对象,同时将抽象方法重写。,39,拓展/抽象类、抽象方法使用import;abstract class Car/公用数据成员声明 public Color color;/车辆颜色 public int gearNum;/档位数 public Strin

25、g tiretype;/轮胎型号 public float engine;/引擎排气量/公共抽象方法声明 public abstract void shiftgear();/换档 public abstract void brake();/刹车 public abstract void aircon();/开冷气 public abstract void headlight();/开大灯,40,class Audi extends Car static int gearNum=5;/声明gearNum为类栏 public Audi()tiretype=GoodTire2085BT;/轮胎型号

26、engine=2400.0f;/排气量 public void shiftgear()/换档(轿车换档方式:+gearNum+档);public void(助力刹车系统);/刹车 public void aircon();/开冷气 public void headlight();/开大灯,41,public class MyCar extends Audi private Color color;public MyCar()color=Color.blue;/设置车辆颜色 public static void main(String args)MyCar mycar=new MyCar();m

27、ycar.equipment();mycar.shiftgear();mycar.brake();public void equipment()(我的车档位数:+this.gearNum);(我的车颜色:+this.color);(我的车轮胎型号:+this.tiretype);(我的车引擎排气量:+this.engine);public void shiftgear()/换档-覆盖的新方法 super.shiftgear();(我的车换档方式:+this.gearNum+档);,42,重点:继承(方法覆盖、变量隐藏),super;多态:方法重载与方法覆盖。Java运行时多态。抽象类。了解:继

28、承中:子类对父类构造函数的调用super();,43,作业:1、抽象类的特点。2、什么是类的继承、其特点?3、方法重载 与方法覆盖 有什么不同?4、(上机题:继承)定义一个学生类 Student,它继承Person类。Student成员:继承来自父类的变量 name(String),性别sex(String),出生年月birthday(类Birthday);新增成员变量:学号 number(int),三门功课的成绩:英语 eng(int),语文 china(int),数学 math(int)方法:覆盖Person的同名方法show(),显示学生所有信息。新增:aver()求三门功课平均分;Person类:见书P96,44,5、p145:9(抽象)上机:P145:9(仿照3.10,3.11继承)例3.16,3.17(抽象类、运行时多态),

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号