子类与继承PPT演示课件_第1页
子类与继承PPT演示课件_第2页
子类与继承PPT演示课件_第3页
子类与继承PPT演示课件_第4页
子类与继承PPT演示课件_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,第6章子类与继承,1,2010-8-1,2,主要内容子类与父类子类的继承性成员变量的隐藏和方法重写super关键字final关键字对象的上转型对象继承与多态abstract类与abstract方法面向抽象编程开-闭原则,2,3,真核生物是其细胞具有细胞核的单细胞生物和多细胞生物的总称,它包括所有动物、植物、真菌和其他具有由膜包裹着的复杂亚细胞结构的生物。,把真核生物分为三界:植物界动物界真菌界,4,动物是多细胞真核生命体中的一大类群,称之为动物界。动物身体的基本形态会在它们发育时变得固定,通常是早在其胚胎发育时,但也有些会在其稍后的生命中有个变态的过程。大多数动物是能动的它们能自发且独立地移动。绝大多数动物是消费者它们依靠其他生命体(如植物)作为其食粮。但也有少部分动物属于分解者以已经死亡的生物体(有机质)作为食粮(例如蚯蚓)。,亚里斯多德将生物区分成植物(通常是不移动的)和动物(时常会移动去获取食物)两种。在林奈系统里,则被分为了植物界和动物界两界。当使用植物界此一特定的分类时,通常会是指三种概念的其中一种。由小至大,这三个类群为:有胚植物、绿色植物、泛植物,5,6.1子类与父类,利用继承,可以先编写一个共有属性的一般类,根据该一般类再编写具有特殊属性的新类,新类继承一般类的状态和行为(成员变量与方法),并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类,被继承的类称为父类(超类)。声明一个类的子类的格式如下:class子类名extends父类名,6,classStudentextendsPeople,Student类声明为People类的子类,People是student的父类,如果没有extends,系统默认继承Object(java.lang.Object),7,2010-8-1,8,6.2子类的继承性,子类继承父类的成员变量作为自己的一个成员变量,就好象它们是在子类中直接声明一样,可以被子类中自己定义的任何实例方法操作。子类继承父类的方法作为子类中的一个方法,就象它们是在子类中直接定义了一样,可以被子类中自己定义的任何实例方法调用。,8,9,6.2.1子类和父类在同一包中的继承性,如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。例1,9,6.2.2子类和父类不在同一包中的继承性,如果子类和父类不在同一个包中,那么,子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法,继承的成员或方法的访问权限保持不变。,10,何时使用protected:1,允许不同包中的子类继承其成员变量和方法。2,禁止不同包中的类访问其成员变量和方法,何时使用友好的:1,禁止不同包中的子类继承其成员变量和方法2,禁止不同包中的类访问其成员变量和方法,(增)使用protected和友好型的区别,11,12,13,2010-8-1,14,6.2.3继承关系(Generalization)的UML图,如果一个类是另一个类的子类,那么UML通过使用一个实线连接两个类的UML图来表示二者之间的继承关系,实线的起始端是子类的UML图,终点端是父类的UML图,但终点端使用一个空心的三角形表示实线的结束。,14,6.3成员变量的隐藏和方法重写6.3.1成员变量的隐藏,对于子类可以从父类继承的成员变量,只要子类中声明的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量。子类对象任然可以调用从父类继承的方法操作隐藏的成员变量。(增)例子:成员变量的隐藏,15,2010-8-1,16,6.3.2方法重写(Override),子类通过重写可以隐藏已继承的实例方法。1重写的语法规则如果子类可以继承父类的某个实例方法,那么子类就有权利重写这个方法。方法重写是指:子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同。,例2,16,2010-8-1,17,6.3.2方法重写(Override),2重写的目的子类通过方法的重写可以隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。重写方法(包括新声明的方法)可以操作:继承的成员变量和方法;新声明的成员变量和方法;无法直接操作:被隐藏的成员变量和方法;但可以使用super关键字操作隐藏的变量和方法(第四节),17,例3,情况1如果将子类改为:doublecomputer(floatx,floaty)情况2如果将父类改为:doublecomputer(floatx,floaty)情况3如果将子类改为:floatcomputer(floatx,floaty,doublez)情况4如果将父类改为:protectedfloatcomputer(floatx,floaty,doublez),18,2010-8-1,19,6.4super关键字,子类可以隐藏从父类继承的成员变量和方法,如果在子类中想使用被子类隐藏的成员变量或方法就可以使用关键字super。,19,2010-8-1,20,6.4.1使用super操作被隐藏的成员变量和方法,在子类中想使用被子类隐藏的成员变量或方法就可以使用关键字super。比如super.x、super.play()就是访问和调用被子类隐藏的成员变量x和方法play()。例4,20,6.4.2使用super调用父类的构造方法,子类不继承父类的构造方法,因此,子类如果想使用父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字super来表示,而且super必须是子类构造方法中的头一条语句。例5,21,场景1省略univerStudent的super结果?如果子类的构造方法没有super关键字,super();是默认加载到子类的构造方法中;场景2如果再省略Student中的student()结果?如果一个类中有一个或多个构造方法,默认构造方法会取消,如果此类需要作为父类,应该包括一个不带参数的构造方法,防止子类省略super出现错误,6.4.2使用super调用父类的构造方法,22,2010-8-1,23,6.5final关键字,final关键字可以修饰类、成员变量和方法中的局部变量。,23,2010-8-1,24,6.5.1final类,可以使用final将类声明为final类。final类不能被继承,即不能有子类。如:finalclassA,24,2010-8-1,25,6.5.2final方法,如果用final修饰父类中的一个方法,那么这个方法不允许子类重写。,25,2010-8-1,26,6.5.3常量,如果成员变量或局部变量被修饰为final的,就是常量。常量在运行期间不允许发生变化。常量在声明时没有默认值,需要程序声明时指定该常量的值例6,26,2010-8-1,27,6.6对象的上转型对象,老虎是哺乳动物,哺乳类是老虎类的父类,只强调了哺乳类的特点,弱化了老虎本身的属性。,27,2010-8-1,28,6.6对象的上转型对象,假设,A类是B类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中时,比如:,Aa;a=newB();或Aa;Bb=newB();a=b;,这时,称对象a是对象b的上转型对象。,28,例7,上转型对象不能操作子类新增的成员变量和方法上转型对象可以操作继承的变量和方法,隐藏的变量,重写的方法.上转型对象不能调用子类重写的静态方法,只能调用父类静态方法,29,注意:父类对象不等于子类对象的上转型对象(主要区别在于重写方法能否调用)上转型对象可以强制转化为子类对象,该子类对象又具备了子类的所有属性和功能不可以将父类创建的对象引用赋值给子类声明的对象People类人猿是人=new类人猿();,30,2010-8-1,31,6.7继承与多态,哺乳动物的叫声很多种,如汪喵多态性就是指父类的某个方法被其子类重写时,可以各自产生自己的功能行为。思考使用UML完成设计例8,31,2010-8-1,32,6.8abstract类和abstract()方法,用关键字abstract修饰的类称为abstract类(抽象类)。如:abstractclassA用关键字abstract修饰的方法称为abstract方法(抽象方法),例如:abstractintmin(intx,inty);,32,注意:1abstract类中可以有abstract方法abstractclassAabstractintmin(intx,inty);intmax(intx,inty)2abstract类不能用new运算创建对象子类必须重写抽象父类的抽象方法给出方法体,33,3.因为final不能重写,但是又因为“2”所以final和abstract不能同时修饰方法或类4.Abstract类可以没有abstract()方法;5.如果一个abstract类是abstract类的子类,他可以重写父类的abstract方法,也可以继承这个abstract()方法;例9,34,2010-8-1,35,6.9面向抽象编程,在设计一个程序时,可以通过在abstract类中声明若干个abstract方法,表明这些方法在整个系统设计中的重要性,方法体的内容细节由它的非abstract子类去完成。,35,使用多态进行程序设计的核心技术之一是使用上转型对象,即将abstract类声明对象作为其子类的上转型对象,那么这个上转型对象就可以调用子类重写的方法。所谓面向抽象编程,是指当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,即所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象。,36,publicclassCircleextendsGeometrydoubler;Circle(doubler)this.r=r;publicdoublegetArea()return(3.14*r*r);,publicclassPillarCirclebottom;/bottom是抽象类Geometry声明的变量doubleheight;Pillar(Geometrybottom,doubleheight)this.bottom=bottom;this.height=height;publicdoublegetVolume()returnbottom.getArea()*height;/bottom可以调用子类重写的getArea方法,37,如果柱体的底部不是圆型,如何修改1,增加所有类型的底部成员变量,增加不同类型的求体积方法。2,优雅地使用面向抽象的编程,使的Pillar的底部不会依赖于某个具体的类,而是随需要进行改变而不用对pillar进行任何改变。例子10,38,2010-8-1,39,6.10开-闭原则,所谓“开-闭原则”(Open-ClosedPrinciple)就是让设计的系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论