JAVA 类的继承和派生

上传人:伴*** 文档编号:243077203 上传时间:2024-09-15 格式:PPT 页数:21 大小:321.50KB
返回 下载 相关 举报
JAVA 类的继承和派生_第1页
第1页 / 共21页
JAVA 类的继承和派生_第2页
第2页 / 共21页
JAVA 类的继承和派生_第3页
第3页 / 共21页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,JAVA,类的继承和派生,Inheritance/extends/derive,继承的概念和软件的重用性,继承是从已有的类中派生出新的类。,新的类能吸收已有类的数据属性和行为;,并能扩展新的能力。,类和类之间的继承关系可以用,UML,符号表示如图,5-1,父类又叫超类或基类,,子类又叫派生类。,父类是子类的一般化,子类是父类的特化(具体化)。,超类或基类,父类,子类,派生类,图,5-1,继承关系,super/base/parent,child/derived,继承的概念和软件的重用性,如表所示,列出了几个超类和子类的实际例子。,超类或基类,父类,子类,派生类,图,5-1,继承关系,超,类,子,类,学生,研究生、本科生、小学生,形状,三角形、圆、矩形,雇员,教师、医生、职员,交通工具,轿车、卡车、公交车,水果,苹果,、,梨,、,桃、桔,表继承例子,“,is-a”,关系: 是类之间的继承的关系。,“,has-a”,关系:代表类之间的组合(参见,4.9,节)。,继承的概念和软件的重用性(续),继承分为:,单继承:指一个子类最多只能有一个父类。,多继承:一个子类可有二个以上的父类。,Java,类只支持单继承,而接口支持多继承。,Java,多继承的功能则是通过接口方式来间接实现的。,继承的概念和软件的重用性(续),object,Win,DialogWin,单继承,in java,Class 1,Class 4,Class 2,Class 3,多继承,in C+,单继承与多继承例子,继承的概念和软件的重用性(续),继承使软件的代码得到重用。提高系统效率。,在继承关系中,,子类通过吸收已有类的数据(属性)和方法(行为),并增加新功能或修改已有功能来创建新类。,Object,类:定义和实现了,Java,系统所需要的众多类的共同行为,它是所有类的根类,,所有的类都是由这个类继承、扩充而来的。,派生类的定义,派生类定义的一般格式为:,类修饰符, class,子类名,extends,父类名,成员变量定义;,成员方法定义;,派生类的定义中,用关键字,extends,来明确指出它所继承的超类。,例,5-1,通过继承来定义派生类,派生类的定义(续),class Automobile,int,Number;,void,setNumber(int,Num),Number=Num;,void,showNumber,(),System.out.println(Automobile,number:+Number);,超类,派生类的定义(续),class Truck extends Automobile,int,capacity;,void,setCapacity(int,truckCapacity,),capacity=,truckCapacity,;,void,showCapacity,(),System.out.println(Truck,Capacity:+capacity);,派生类,派生类的定义(续),class,AutomobileExtends,public static void main(String,args,),Truck,tc,=new Truck();,tc.setNumber(8888);,tc.setCapacity(10);,tc.showNumber,();,tc.showCapacity,();,该程序运行的结果为:,Automobile number:8888,Truck Capacity:10,派生类使用从超类中继承的方法,setNumber,派生类使用从超类中继承的方法,showNumber,作用域和继承,第,4,章讨论了成员访问控制修饰符:,public,、,private,、,package,和,protected,。,超类,public,的成员可以在超类中使用,也可以在子类使用,,程序可以在任何地方访问,public,超类成员。,超类的,private,成员仅在超类中使用,,,在子类中不能被访问,。,超类,protected,成员,可在子类和同一包内其他类被访问,。,超类,package,成员,可在同一包内其他类被访问,。,子类从超类中继承成员时,超类的所有,public,和,protected,成员在子类中,都保持它们原有的访问修饰符。,例如,超类的,public,成员成为子类的,public,成员。超类的,protected,成员也会成为子类的,protected,成员。子类只能通过超类所提供的非,private,方法来访问超类的,private,成员。,方法的重新定义,(overriding),如果在子类中定义的某个方法与父类的某个方法有相同方法署名(方法头),则称子类重新定义,(,overriding,)了父类的该方法,或称重写或覆盖。,子类的对象调用这个方法时,将使用子类中定义的方法,对它而言,父类中定义的方法就“看不见”了。,如要在子类的方法中要使用超类的这个被重写的方法,用:,super.,超类同名方法()。,例,5-2,方法的重写,Point,类的设计,:,成员变量,int,x,,,y,成员方法,setX,(,int,),,,getX,(),,,setY,(,int,),,,getY,(),,,toString,(),;,Point() , Point(,int xValue,int yValue,),Circle,类的设计,:,成员变量,x,,,y/,继承自,Point,类,radius,成员方法,setX,,,getX,,,setY,,,getY,/,继承自,Point,类,set Radius,,,getRadius,,,getDiameter,,,getCircumference,,,toString,/,重写父类同名方法,getArea,Circle (), Circle,(,int xValue,int yValue, double,radiusValue,),方法的重新定义,(overriding)(,续),Point.java,文件的部分代码:,public String,toString,(),return + x + , + y + ;,Circle.java,文件的部分代码:,public String,toString,(),return Center = ,+,super.toString,()+ Radius = + radius;,重写了超类,Point,类中的,toString,方法,通过,super,调用超类中的被重写的,toString,方法,继承下的构造函数和,finalize,方法,继承下的构造函数的调用次序:,子类构造函数在执行自己的任务之前,,将显式地(通过,super,引用)或隐式地(调用超类的默认构造函数或无参数构造函数),调用其直接超类的构造函数,。类似地,如果超类派生于另一个类,则要求超类的构造函数调用层次结构中上一级类的构造函数,依此类推。在调用请求中,最先调用的构造函数总是,Object,类的构造函数。最后才会执行原有的子类构造函数。,继承下的,finalize,方法的调用次序,类层次结构中子类,finalize,方法调用应先于超类的,finalize,方法,直至最后调用,Object,超类的,finalize,方法。,finalize,方法的定义格式:,void finalize(),超类和子类的关系(一),我们再次使用点,圆继承层次来讨论超类与子类的关系。为了使圆类继承点类并能访问点类中的成员变量,我们可,将点类中的,x,和,y,定义成,protected,的成员,,这样我们就可以在点类的子类(圆类)中访问点类中的,x,和,y,变量了。,下面的例,5-4,中,,Circle2,类通过继承,Point2,类,就可以在,Circle2,类中访问它的超类(,Point2,类)的,protected,和,public,成员了。,例,5-4,使用,protected,数据的点,-,圆层次,超类和子类的关系(二),例,5-4,将超类(,Point2,类)的成员变量,x,、,y,声明为,protected,,以便子类能够继承。,但在使用,protected,成员变量时,会产生两个问题:,子类可将非法值赋给变量,导致该变量处于非法状态。,例如,如果将,Circle2,的成员变量,radius,声明为,protected,,则它的子类就能够将负值赋给,radius,变量。,编写的子类,Circle2,方法更依赖于超类,Point2,实现。,例如,如果由于某种原因将成员变量,x,和,y,的名称改为,xCoordinate,和,yCoordinate,,则子类直接引用这些超类成员变量的所有地方都必须进行相应地修改。,为了使子类应依赖于,超类服务,,而不应依赖于,超类实现,:,把超类中的成员变量声明为,private,,,并在超类中定义访问这些,private,成员变量的,public,型的方法,,例,5-5,把超类中的成员变量声明为,private,,,在子类中使用从超类中继承过来的方法对这些私有成员变量进行访问。,继承的程序设计举例(一),下面让我们来看一个具有,3,级继承层次的例子。这,3,级为点,圆,圆柱体。它们之间的继承关系如图,5-3,所示。,例,5-6,继承的程序设计举例,图,5-3,三级继承层次,Point,类的设计,:,成员变量:,int,x,,,y,成员方法:,setX,,,getX,,,setY,,,getY,,,toString,.,Point() , Point(,int,xValue,int,yValue,),Circle,类的设计,:,成员变量:,double radius,成员方法:,setRadius,,,getRadius,,,getDiameter,,,getCircumference,,,getArea,toString,Circle( ), Circle(,int xValue,int yValue,double,radiusValue,),Clinder,类的设计:,成员变量:,double,hight,成员方法:,setHight,,,getHight,,,getArea,toString,Cylinder(,int xValue,int yValue, double,radiusValue,double,heightValue,),
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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