欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

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

    • 资源ID:5640912       资源大小:280.49KB        全文页数:44页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    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,子类构造函数:无参数:先调用父类无参数的构造函数;有参数:若无super(参数),先调用父类无参数的构造函数;若有super(参数),不会调用父类无参数的构造函数。,4,目标,继承多态抽象类、抽象方法,5,一、类的继承,Java 最令人心动的特性就是它的代码复用了。代码复用有两种方式1、类的包含关系当一个类定义中包含另一个类的实例时,就是类的包含关系,通常称为“HAS-A(拥有A)”。2、类的继承关系在面向对象的程序设计中,“IS-A”称为继承关系。,6,HAS-A,汽车,发动机,车轮,方向盘,IS-A,水果,苹果,梨,香蕉苹果,富士苹果,7,继承(Inheritance)指一个类(Class)可以继承其它类的所有内容,包括变量和方法。被继承的类称为父类或者超类(Superclass),继承后产生的类成为子类或者派生类(Subclass)。,8,继承(Inheritance)利用extends创建子类修饰符 class 子类名 extends 父类名 语句体不使用extends的继承如果没有使用extends,则该类为 的子类注意:在Java语言中,所有的类都是由Object类派生出来的,比如前面介绍的String类,以及用户自己新建的类。,表示继承关系,9,继承注意事项:Java中,每一个类只可以有一个父类,即单继承;一个类可以有多个子类。父类含有其所有子类共同的内容,每一个子类各自具有与其他子类不相同的内容。子类可以添加自己的成员变量和方法,一、类的继承,Emoloyee类:name sex,Worker类:category dressAllowance,Officer类:empClass vehicle,工人类,继承了父类的姓名和性别属性外还包含类别和是否有服装津贴属性,主任类,还包含级别和是否配备交通工具属性,职员类,具有姓名和性别两个属性,10,继承中的访问权限如果父类中的变量和方法为public、protected,其子类中的这些变量和方法依然为public、protected子类不能访问父类中权限为private的实例变量和实例方法例class_extend_exsampleextend_exmanagerTestSuperTestSuper.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,子类中父类成员变量的隐藏:子类的成员变量与父类的成员变量同名,则在子类中父类中的成员变量被隐藏,当子类中的变量名与父类的相同,原来的变量被遮盖;可使用super.变量名引用父类变量例class_extend_exsampleextend_exmanagerThreeClass.java,14,方法覆盖(overriding):子类中定义的方法和祖先类中某个方法同名,同参数行,(即子类可以改写父类方法所实现的功能),则父类中的该方法被覆盖。子类可使用super.方法名引用父类方法。子类中重写的方法必须与父类方法有:相同的名字、相同的参数表、相同的返回类型。,15,实例:extend_exsampleextend_ex 类的UML图,protected:被子类及同一个包内的 点(坐标x,y)其他类访问 圆(圆心、半径),一、类的继承,16,例如父类:MyPoint类 public String toString()return(+x+,+y+);子类Mycirle覆盖父类的toString()方法;public String toString()return 圆心+super.toString()+;半径:+radius;/return 圆心+(+x+,+y+)+;半径:+radius;,一、类的继承,17,区分:方法重载、方法覆盖,方法的覆盖(overriding)和重载(overloading)方法的覆盖:子孙类中定义的方法和祖先类中某个方法同名,同参数行,则祖先类中的该方法被覆盖.方法的重载:指一个对象的多态性,即多个方法用相同的名称,但参数行不同.,18,super:表示父类对象。p122何时使用?若子类的成员变量(或方法)名与父类的成员变量(方法)名字相同时,可使用super指明父类的成员变量或方法。使用方法(1)访问被子类隐藏的父类中的成员变量 super.成员变量(2)调用被子类覆盖的父类中的成员方法 super.成员方法(3)调用直接基类的构造方法 super(参数),一、类的继承_super,关键字 super,19,例:extend_exsampleextend_ex,setRadius();getRadius();area();toString();,MyPoint,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(),覆盖父类的方法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 Mycircle()(调用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 class 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()/子类添加的求球的体积的方法: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(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();area();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,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变量;父类的实例变量;父类的构造方法;子类的实例变量;子类的构造方法;,29,实例2 exten_super_in_oneSuperDemo UML图,Main(),30,多态是面向对象系统中的又一个重要特性。在java语言中,提供了两种多态机制:重载、重写。重载:同一个类中多个方法有相同的名字,不同的参数列表,这种情况称 为方法重载。调用时根据形参的个数和类型来决定调用的是哪个方法。返回类型不同并不足以构成方法重载。重写:子类重写父类的成员方法。子类中重写的方法必须与父类方法有:相同的名字、参数表、返回类型。Java虚拟机会根据调用这个方法的类来确定哪个方法被调用。可通过super关键字调用直属父类中被重写的方法,二、多态,多态,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()public 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 fathervoid 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 OverRiddenDemo1public 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)father;/强制转换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 obj3=(MySphere)obj2;/强制转换 System.out.println(obj3:球类引用);System.out.println(t球的体积:+obj3.volume();,36,抽象类和抽象方法,1、抽象方法:只有方法头、没有方法体的方法。2、抽象类:包含抽象方法的类。抽象类、抽象方法的特征:抽象类的属性和方法都是他的子类的公共属性和方法的集合抽象类不能被实例化。子类必须实现父类的所有抽象方法,否则必须仍然定义为抽象类抽象类中也存在一般方法public void show(),二、抽象类,37,声明抽象类的格式:abstract class 类名.抽象方法 格式如下:abstract 数据类型 方法名(paramlist);注意:声明格式中没有,最后的;不能省略。,抽象类的关键字,抽象方法的关键字,38,3、抽象类与抽象方法的使用 例:class_extend_exsample abstractExanimal抽象类只是预先确定了总体结构,缺少实际内容或实现过程不能被实例化,所以只能被继承以它为基类,用子类创建对象,同时将抽象方法重写。,39,拓展/抽象类、抽象方法使用import;abstract class Car/公用数据成员声明 public Color color;/车辆颜色 public int gearNum;/档位数 public String 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;/轮胎型号 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();mycar.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运行时多态。抽象类。了解:继承中:子类对父类构造函数的调用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(抽象类、运行时多态),

    注意事项

    本文(《类继承多态》PPT课件.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开