Java语言程序设计基础教程(继承、接口和内部类)ppt.ppt_第1页
Java语言程序设计基础教程(继承、接口和内部类)ppt.ppt_第2页
Java语言程序设计基础教程(继承、接口和内部类)ppt.ppt_第3页
Java语言程序设计基础教程(继承、接口和内部类)ppt.ppt_第4页
Java语言程序设计基础教程(继承、接口和内部类)ppt.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第4章继承 接口和内部类 继承 超类和子类抽象类和接口内部类Class类 4 1继承 超类和子类 继承是面向对象编程技术的一块基石 是一种由已有的类创建新类的机制 运用继承 可以先创建一个通用类 它定义了一系列相关属性的一般特性 该类可以被更具体的类继承 每个具体的类都增加一些自己特有的东西 在Java术语学中 被继承的类叫超类 superclass 继承超类的类叫子类 subclass 子类不能继承父类中访问权限为private的成员变量和方法 子类可以重写父类的方法 及命名与父类同名的成员变量 Java不支持多重继承 即一个类从多个超类派生的能力 通过继承实现代码复用 Java中所有的类都是通过直接或间接地继承java lang Object类得到的 4 1 1子类 继承一个类 只要用extends关键字把一个类的定义合并到另一个中就可以了 创建子类的一般格式为 classSubClassextendsSuperClass 例如 classStudentsextendsPeople 4 1 2子类的继承 子类通过隐藏父类的成员变量和重写父类的方法 可以把父类的状态和行为改变为自身的状态和行为 例如 classSuperClass intx voidsetX x 0 classSubClassextendsSuperClass intx 隐藏了父类的变量x voidsetX 重写了父类的方法setX x 5 注意 子类中重写的方法和父类中被重写的方法要具有相同的名字 相同的参数表和相同的返回类型 只是函数体不同 例4 1 一个关于继承的简单例子 Createasuperclass classSA inti j voidshowij System out println iandj i j CreateasubclassbyextendingclassA classSBextendsA intk voidshowk System out println k k voidsum System out println i j k i j k classSimpleInheritance publicstaticvoidmain Stringargs SAsuperOb newSA SBsubOb newSB Thesuperclassmaybeusedbyitself superOb i 10 superOb j 20 System out println ContentsofsuperOb superOb showij System out println ThesubclasshasAccesstoallpublicmembersofitssuperclass subOb i 7 subOb j 8 subOb k 9 System out println ContentsofsubOb subOb showij subOb showk System out println System out println Sumofi jandkinsubOb subOb sum 4 1 3super关键字 与类中this关键字相似 Java语言中使用关键字super表示父类对象 通过在子类中使用super做前缀可以引用被子类隐藏的父类变量或被子类重写的父类方法 super用来引用当前对象的父类 虽然构造方法不能够继承 但利用super关键字 子类构造方法中也可以调用父类的构造方法 Super的使用有2种情况 1 操作被隐藏的变量和方法 访问父类被隐藏的成员变量 一般格式为 super variable 调用父类中被重写的方法 一般格式为 super Method paramlist 假如成员变量x和方法y 分别是被子类隐藏的父类的变量和方法 则 super x 表示父类的成员变量xsuper y 表示父类的成员方法y 例4 2 利用supers操作父类被隐藏和重写的变量和方法 classep4 2 a intn floatf floatsum 0 for inti 1 i n i sum sum i returnsum classep4 2 bextendsep4 2 a intn floatf floatc super n n c super f returnc n floatg floatc c super f returnc 2 classep4 2 publicstaticvoidmain Stringargs ep4 2 baver newep4 2 b aver n 100 System out println result one aver f System out println result two aver g 2 使用super调用父类的构造方法 子类不能继承父类的构造方法 若子类想使用父类的构造方法 必须在子类的构造方法中利用super来调用 且super必须是子类构造方法中的第一条语句 调用父类的构造函数 一般格式为 super paramlist 例4 3 利用supers操作父类的构造方法 classep4 3 student intnum Stringname ep4 3 student intnum Stringname this num num this name name System out println 姓名 name n学号 num classep4 3 univerextendsep4 3 student boolean婚否 ep4 3 univer intnum Stringname booleanb super num name 婚否 b System out println 婚否 婚否 classep4 3 publicstaticvoidmain Stringargs ep4 3 universtudent one newep4 3 univer 1234 小强 false 程序的运行结果如下所示 需要注意的是 若子类调用父类的构造方法 在子类的构造方法中省略掉super关键字 则系统默认有 super 即调用父类不带参数的构造方法 由于Java语言规定如果一个类中含有一个或多个构造方法 系统不提供默认的构造方法 不含参数的构造方法 所以当在父类中定义了多个构造方法时 应考虑包括一个不带参数的构造方法 以防止子类省略super关键字时出现错误 4 2抽象类和接口 Java语言中 用abstract关键字来修饰一个类时 这个类叫做抽象类 用abstract关键字来修饰一个方法时 这个方法叫做抽象方法 格式如下 abstractclassabstractClass 抽象类abstractreturnTypeabstractMethod paramlist 抽象方法 4 2 1抽象类 抽象类就是不能使用new方法进行实例化的类 即没有具体实例对象的类 抽象类有点类似 模板 的作用 目的是根据其格式来创建和修改新的类 对象不能由抽象类直接创建 只可以通过抽象类派生出新的子类 再由其子类来创建对象 在抽象类中的成员方法可以包括一般方法和抽象方法 抽象方法就是以abstract修饰的方法 这种方法只声明返回的数据类型 方法名称和所需的参数 没有方法体 也就是说抽象方法只需要声明而不需要实现 当一个方法为抽象方法时 意味着这个方法必须被子类的方法所重写 否则其子类的方法仍然是abstract的 抽象类中不一定包含抽象方法 但是包含抽象方法的类一定要被声明为抽象类 抽象类本身不具备实际的功能 只能用于派生其子类 而定义为抽象的方法必须在子类派生时被重写 抽象类中可以包含构造方法 但是构造方法不能被声明为抽象 一般来说 由于不能够用抽象类直接创建对象 因此在抽象类内定义构造方法是多余的 需要注意的是 抽象类不能用final来修饰 即一个类不能既是最终类又是抽象类 abstract不能与private static final native并列修饰同一个方法 例4 5 定义抽象类Animal 从抽象类派生子类Horse和Dog 实现父类的抽象方法 abstractclassep4 5 Animal 定义抽象类Stringstr ep4 5 Animal Strings 定义抽象类的一般方法str s abstractvoideat 定义抽象方法 classep4 5 Horseextendsep4 5 Animal 定义继承Animal的子类Stringstr ep4 5 Horse Strings super s 调用父类的构造方法 voideat 重写父类的抽象方法System out println 马吃草料 classep4 5 Dogextendsep4 5 Animal Stringstr ep4 5 Dog Strings super s voideat System out println 狗吃骨头 classep4 5 publicstaticvoidmain Stringargs ep4 5 HorseHorse1 newep4 5 Horse 马 ep4 5 DogDog1 newep4 5 Dog 狗 Horse1 eat Dog1 eat 4 2 2接口 接口是抽象类的一种 只包含常量和方法的定义 而没有变量和方法的实现 且其方法都是抽象方法 它的用处体现在下面几个方面 通过接口实现不相关类的相同行为 而无需考虑这些类之间的关系 通过接口指明多个类需要实现的方法 通过接口了解对象的交互界面 而无需了解对象所对应的类 4 2 3接口的定义 接口的定义包括接口声明和接口体 接口声明的格式如下 public interfaceinterfaceName extendslistOfSuperInterface extends子句与类声明的extends子句基本相同 不同的是一个接口可有多个父接口 用逗号隔开 而一个类只能有一个父类 接口体包括常量定义和方法定义 常量定义格式为 typeNAME value 该常量被实现该接口的多个类共享 具有public final static的属性 方法体定义格式为 具有public和abstract属性 returnTypemethodName paramlist 4 2 4接口的实现 在类的声明中用implements子句来表示一个类使用某个接口 在类体中可以使用接口中定义的常量 而且必须实现接口中定义的所有方法 一个类可以实现多个接口 在implements子句中用逗号分开 例4 6 一个接口实现的例子 interfaceep4 6 a 定义第1个接口doublepi 3 14 abstractdoublearea interfaceep4 6 b 定义第2个接口abstractvoidsetColor Stringc interfaceep4 6 cextendsep4 6 a ep4 6 b 接口的多重继承abstractvoidvolume classep4 6 Cylinderimplementsep4 6 c 以第3个接口实现类doubleradius intheight Stringcolor publicep4 6 Cylinder doubler inth radius r height h publicdoublearea 实现第1个接口的方法returnradius radius pi publicvoidsetColor Stringc 实现第2个接口的方法color c System out println 形状的颜色 color publicvoidvolume 实现第3个接口的方法System out println 圆柱体的体积 area height classep4 6 publicstaticvoidmain Stringargs ep4 6 CylinderOne newep4 6 Cylinder 3 0 5 One setColor 红色 One volume 4 3内部类 内部类是在一个类的内部嵌套定义的类 它可以是其它类的成员 也可以在一个语句块的内部定义 还可以在表达式内部匿名定义 4 3 1内部类的定义和使用 内部类有如下特性 一般用在定义它的类或语句块之内 在外部引用它时必须给出完整的名称 名字不能与包含它的类名相同 可以使用包含它的类的静态和实例成员变量 也可以使用它所在方法的局部变量 可以定义为abstract 可以声明为private或protected 若被声明为static 就变成了顶层类 不能再使用局部变量 若想在InnerClass中声明任何static成员 则该InnerClass必须声明为static 下面是一个说明内部类如何使用的例子 其中 定义了两个内部类 MouseMotionHandler和MouseEventHandler 分别用来处理鼠标移动事件和鼠标点按事件 例4 7 一个内部类如何使用的例子 importjava awt importjava awt event publicclassTwoListenInner privateFramef privateTextFieldtf publicstaticvoidmain Stringargs TwoListenInnerthat newTwoListenInner that go publicvoidgo f newFrame Twolistenersexample f add North newLabel Clickanddragthemouse tf newTextField 30 f add South tf f addMouseMotionListener newMouseMotionHandler f addMouseListener newMouseEventHandler f setSize 300 300 f setVisible true publicclassMouseMotionHandlerextendsMouseMotionAdapter publicvoidmouseDragged MouseEvente Strings Mousedragging X e getX Y e getY tf setText s publicclassMouseEventHandlerextendsMouseAdapter publicvoidmouseEntered MouseEvente Strings Themouseentered tf setText s publicvoidmouseExited MouseEvente Strings Themouseleftthebuilding tf setText s 4 3 2匿名类的定义和使用 匿名类是一种特殊的内部类 它是在一个表达式内部包含一个完整的类定义 当一个内部类的类声名只是在创建此类对象时用了一次 而且要产生的新类需继承于一个已有的父类或实现一个接口 才能考虑用匿名类 由于匿名类本身无名 因此它也就不存在构造方法 它需要显示地调用一个无参的父类的构造方法 并且重写父类的方法 所谓的匿名就是该类连名字都没有 只是显示地调用一个无参的父类的构造方法 4 4Class类 Class是java lang包中的类 该类的实例用来封装对象运行时的状态 当一个类被加载且创建对象时 和该类相关的一个类型为Class的对象就会自动创建 4 4 1获取类的有关信息 Class类本身不提供构造方法 不能用new运算符和构造方法创建一个Class对象 任何对象调用getClass 方法都可以获取和该对象相关的一个Class对象 这个Class对象调用如下的方法可以获取创建对象的类的有关信息 比如 类的名字 类中的方法名称 成员变量的名称等 常用方法如下所示 StringgetName 返回类的名字Constructor getDeclaredConstructor 返回类的全部构造方法Field getDeclaredFields 返回类的全部成员变量Method getDeclaredMethods 返回类的全部方法 例4 9 使用相应的Class对象列出全部成员变量和方法的名称 importjava lang reflect classRect doublewidth height area publicdoublegetArea area height width returnarea publicclassep4 9 publicstaticvoidmain Stringargs Rectrect newRect Classcs rect getClass StringclassName cs getName Constructor con cs getDeclaredConstructors Field field cs getDeclaredFields Method method cs getDeclaredMethods System out println 类的名字 className System out println 类中有如下的成员变量 for inti 0 i field length i System out println field i toString System out println 类中有如下的方法 for inti 0 i method length i System out println method i toString System out println 类中有如下的构造方法 for inti 0 i con length i Sy

温馨提示

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

评论

0/150

提交评论