《类继承多态》PPT课件.ppt
《《类继承多态》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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 类继承多态 继承 PPT 课件
链接地址:https://www.31ppt.com/p-5640912.html