《类的进一步讨论》PPT课件.ppt_第1页
《类的进一步讨论》PPT课件.ppt_第2页
《类的进一步讨论》PPT课件.ppt_第3页
《类的进一步讨论》PPT课件.ppt_第4页
《类的进一步讨论》PPT课件.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1,第4讲类的继承、抽象类及接口,主要内容类的继承抽象类内部类、匿名类及最终类包及访问限定接口本讲小结,2,类的继承,继承是面向对象的重要特点之一。类的继承使得能够在已有类的基础上构造新的类,新类除了具有被继承类的属性和方法外,还可以根据需要添加新的属性和方法。继承有利于代码的复用。通过继承可以更有效地组织程序结构,并充分利用已有的类来完成复杂的任务,减少了代码冗余和出错的几率。类继承的实现下边以一个定义学生入学注册登记类的示例说明类继承的实现。,3,类的继承(定义类StudentRegister),学生入学注册登记项包括:个人的基本信息(这些信息包括在Citizen类中);学号String(studentID)入学成绩int(enterResult)院系String(department)专业String(specialty)等等。此外还需要定义一些显示这些项的方法。,publicclassStudentRegisterextendsCitizenStringstudentId;/说明学号intenterResult;/说明入学成绩Stringdepartment;/说明院系Stringspecialty;/说明专业,4,类的继承(定义类StudentRegister),publicStudentRegister(Stringname,Stringalias,Stringsex,Stringbrithday,Stringhomeland,StringID,StringstudentId,intenterResult,Stringdepartment,Stringspecialty)/构造方法super(name,alias,sex,brithday,homeland,ID);/调用父类构造方法this.studentId=studentId;this.result=result;this.department=department;this.specialty=specialty;publicvoiddisplay()super.display();/调用父类显示方法System.out.println(学号:+studentId);System.out.println(入学成绩:+enterResult);System.out.println(院系:+department);System.out.println(专业:+specialty);System.out.println(-);,编译程序,5,测试StudentRegister类,publicclassStudentRegisterTestpublicstaticvoidmain(Stringargs)StudentRegisters1=newStudentRegister(“丽柔”,“一晓”,“女”,“1988.12.11”,“上海”,,“200608010201”,624,“工程学院”,“工业设计”);/创建对象s1.display();/显示对象属性,6,类的继承,继承就是子类利用父类中定义的变量和方法,就像它们属于子类本身一样.方法的重载就是在同一个类中至少有两个方法使用同一个名字,区分它们的主要依据:参数的个数不同;或参数的类型不同。这是多态性的具体体现。例:在StudentRegister类中加入不带参数的构造方法和能够只显示学号、姓名和入学成绩项的成员方法。,7,添加方法,publicStudentRegister()super();/执行父类构造方法studentId=“00000000000”;enterResult=0;department=“无”;specialty=“无“;publicvoiddisplay(StudentRegisters1)System.out.print(学号:+s1.studentId);System.out.print(“-姓名:”+s1.getName();System.out.println(“-入学成绩:+s1.enterResult);,8,测试StudentRegister类的功能,publicclassStudentRegisterTest1publicstaticvoidmain(Stringargs)StudentRegisters1=newStudentRegister(“丽柔”,“一晓”,“女”,“1988.12.11”,“上海”,,“200608010201”,624,“工程学院”,“工业设计”);/创建对象s1StudentRegisters2=newStudentRegister();/创建对象s2s2.studentId=“20060801245”;/为对象s2的属性赋值s2.enterResult=585;/.s2.setName(“席铪”);/.s1.display();/显示对象s1所有属性s2.display();/显示对象s2所有属性s1.display(s1);/显示对象s1的部分属性s2.display(s2);/显示对象s2的部分属性,9,类的继承,方法的覆盖在子类中重新定义(重写)父类中已有的方法。这样做的好处是方法名一致易记易用;可以实现与父类方法不同的功能;调用父类的同名方法:super.方法名(参数列表);变量的隐藏在子类中定义了和父类中同名的属性在方法中定义了和类中同名的属性在方法中引用属性时,系统采用局部优先的原则,即:方法中定义的属性直接使用;本类中定义的同名属性的引用:this.属性名;父类中定义的同名属性的引用:super.属性名;,10,抽象类,类是对现实世界中实体的抽象,但我们不能以相同的方法为现实世界中所有的实体做模型,因为大多数现实世界的类太抽象而不能独立存在。例如:几何图形类、交通工具类、鸟类等等。抽象类是指不能直接被实例化的类,因此一般把它作为其它类的超类。与final类正好相反。抽象方法是指只有方法声明而没有方法体的方法。在该类中只声明但不提供方法实现(方法体),由继承类提供方法实现。只要类中声明了一个抽象方法,该类就必须是抽象类.,11,抽象类的定义,定义抽象类的一般格式如下:访问限定符abstractclass类名./属性说明访问限定符abstract类型方法名(参数声明列表);/抽象方法声明/非抽象方法定义所谓抽象方法,是指仅声明了类的行为,并没有真正实现行为的代码。抽象方法只能存在于抽象类中.构造方法、静态(static)方法、最终(final)方法和私有(private)方法不能被声明为抽象方法。抽象类中可以有一个或多个抽象方法,也可以没有。如果没有抽象方法,这就意味着要避免使用该类直接创建对象。抽象类只能被继承(派生子类)而不能创建具体对象即不能被实例化。,12,Shape类定义,定义几何图形类Shape任何几何图形都有一个名称,都占据一定的面积,因此我们可以作如下的抽象定义:/*这是抽象的平面形状类的定义程序的名字是:Shape.java*/publicabstractclassShapeStringname;/声明属性publicabstractdoublearea();/抽象方法声明抽象类的实现例:定义并实现一个三角形类Triangle。,13,抽象类的实现(三角形),三角形面积公式:其中:a,b,c表示三角形的三条边的边长,根据上边公式中所涉及的量,需要在Triangle类中定义三角形的有关属性三条边:sideA、sideB、sideC。由Shape类派生Triangle类。因此在Triangle类中必须实现Shape类中的抽象方法area();也可在Triangle类中定义计算三角形周长等方法。,14,Triangle类定义,/*这是定义平面几何图形三角形类的程序程序的名字是:Tritangle.java*/publicclassTriangleextendsShape/这是Shape的派生子类doublesideA,sideB,sideC;/声明实例变量三角形3条边publicTriangle()/无参数构造器name=示例全等三角形;sideA=1.0;sideB=1.0;sideC=1.0;publicTriangle(doublesideA,doublesideB,doublesideC)/构造器name=任意三角形;this.sideA=sideA;this.sideB=sideB;this.sideC=sideC;,15,Triangle类定义实现,publicdoublearea()/实现抽象方法doubles=0.5*(sideA+sideB+sideC);returnMath.sqrt(s*(s-sideA)*(s-sideB)*(s-sideC);测试Triangle类publicclassTriangleTestpublicstaticvoidmain(Stringargs)Trianglet1=newTriangle();/创建一个标准三角形对象Trianglet2=newTriangle(4,5,6);/创建一个三角形对象System.out.println(+”面积=”+t1.area();System.out.println(+”边长为4,5,6其面积=”+t2.area();,16,内部类,内部类(InnerClass)是指被嵌套定义在另外一个类内甚至是一个方法内的类,也称之为类中类。嵌套内部类的类称为外部类(OuterClass),内部类通常被看成是外部类的一个成员。例:工厂工人加工正六边形的阴井盖,先将钢板压切为圆型,然后再将其切割为正六边形,求被切割下来的废料面积。求解这个问题。只需要计算出圆的面积和正六边形的面积,然后相减即可。当然我们可以将正六边形化作六个全等三角形求其面积。下边建立一个圆类,并在圆类内定义内部类处理正六边形。,17,定义Circle类,/*该程序主要演示内部类的应用,程序名:Circle.java,在类中嵌套了Polygon类*/publicclassCircleextendsShape/继承Shape类doubleradius;publicCircle()/构造标准圆name=标准圆;radius=1.0;publicCircle(doubleradius)/构造一般圆name=一般圆;this.radius=radius;publicdoublearea()/实现父类的抽象方法returnradius*radius*Math.PI;/返回圆的面积,18,定义Circle类,classPolygon/定义内部类PolygonTrianglet1;/声明三角形类对象Polygon(doublea,doubleb,doublec)/内部类构造方法t1=newTriangle(a,b,c);/创建三角形对象doublearea()/内部类方法returnt1.area()*6;/返回正六边形面积/内部类Polygon结束publicdoubleremainArea()/计算被切割掉的废料面积Polygonp1=newPolygon(radius,radius,radius);/创建内部类对象returnarea()-p1.area();,19,测试Circle类求切除面积,publicclassCircleTestpublicstaticvoidmain(Stringargs)Circlec1=newCircle(.5);/创建半径为0.5的圆对象System.out.println(圆面积=+c1.area();System.out.println(正六边形面积=+(c1.area()-c1.remainArea();System.out.println(被切除的面积=+c1.remainArea();,20,内部类特点,内部类作为一个成员,它有如下特点:可以使用static修饰为静态内部类。静态和非静态内部类的主要区别:静态内部类对象和外部类对象可以相对独立,既可直接创建对象(new外部类名.内部类名(),也可通过外部类对象创建。非静态内部类对象只能由外部对象创建。静态类中只能使用外部类的静态成员,不能使用外部类的非静态成员;非静态类中可以使用外部类的所有成员。在静态类中可以定义静态和非静态成员;在非静态类中只能定义非静态成员。外部类不能直接存取内部类的成员。只有通过内部类才能访问内部类的成员。如果内部类被定义在一个方法内(本地内部类),它完全被隐藏在方法中,甚至同一个类的其他方法也无法使用它。,21,匿名类和最终类,匿名类(AnonymousClass)所谓匿名类就是一种没有类名的内部类,通常更多的出现在事件处理的程序中。在某些程序中,往往需要定义一个功能特殊且简单的类,且只想使用它的一个对象,并把它作为参数传递给一个方法。此种情况下只要该类是一个现有类的派生或实现一个接口,就可以使用匿名类。最终类所谓最终类即是使用“final”关键字修饰的类。一个类被声明为最终类,这就意味着该类的功能已经齐全,不能够由此类再派生子类。在定义类时,当你不希望某类再能派生子类,可将它声明为最终类。,22,包及访问限定,Java中常用的标准类包java.lang包中存放了Java最基础的核心类,诸如:System、Math、String、Integer、Float类等等。java.awt包中存放了构建图形化用户界面(GUI)的类。javax.swing包中提供了更加丰富的、精美的、功能强大的GUI组件,是java.awt功能的扩展。java.applet包中提供了applet(小程序)所需要的一些类.java.util包中提供了一些实用工具类。java.io包中提供了数据流输入/输出操作的类。java.sql包中提供了支持使用标准SQL方式访问数据库功能的类。包中提供与网络通讯相关的类。用于编写网络实用程序。,23,包(package),在Java中使用包来管理类。创建包(package)语句其一般格式如下:package包名;需要说明的是:此语句必须放在整个源程序第一条语句的位置(注解行和空行除外)。包名应符合标识符的命名规则,习惯上,包名使用小写字母书写。可以使用多级结构的包名.如标准类包那样:java.util、java.sql等等。例如:要把所有的几何图形类放入shape类包中,只需在这些几何图形类程序的第一条语句位置放上:packageshape;,24,包(package),包文件的编译javacd文件夹名源文件名其中:-d表明带有包的创建。文件夹名是已存在的文件夹名,要创建的包将放在该文件夹下。引用类包中的类在程序的第一行使用import语句导入类包:import包名.*;或:import包名.类名;在程序中直接引用类包中所需要的类。其引用的一般格式是:包名.类名,25,访问限定,publicpublic限定符不能用于限定内部类。一个源程序中可以定义多个类,但最多只能有一个被限定为公共类。如果有公共类,则程序名必须与公共类同名。private限定符只能用于成员变量、方法和内部类。私有的成员只能在本类中被访问,即只能在本类的方法中由本类的对象引用。protected限定符也只能用于成员变量、方法和内部类。它可以被其子类(包括本包的或其他包的)访问,也可以被本包内的其他类访问。,26,接口,在Java中可以把接口看作是一种特殊的抽象类,它只包含常量和抽象方法的定义,而没有变量和方法的实现,它用来表明一个类必须做什么,而不去规定它如何做。publicinterface接口名extends父接口名列表/以下声明常量类型常量名=常数值;/以下声明抽象方法返回值类型方法名(参数列表)throw异常列表;对接口体中定义的常量,系统默认为是“staticfinal”修饰的,不需指定。对接口体中声明的方法,系统默认为是“abstract”的,也不需指定。,只有public和缺省的,接口名必须与文件名相同,27,定义接口,例:将上述的抽象类Shape改为接口实现。/*本程序是一个定义接口类的程序,名字是:ShapeI.java*接口名为ShapeI,它包含常量PI和计算面积与周长的方法*area()、girth()声明*/packagesha

温馨提示

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

评论

0/150

提交评论