




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA语言 第4讲面向对象程序设计 2 继承 2020年1月1日 上一讲回顾 1 面向对象的基本特征 封装 继承和多态 2 类的定义 对象的创建和引用方法 3 定义类时的各种细节 构造函数的定义和使用 4 各种修饰符的使用方法 2020年1月1日 学习要点 理解继承的概念 超类和子类的关系 掌握它们在继承中的应用 掌握类中有关private成员的访问控制方法 理解方法重载和方法重写的区别和使用方法 2020年1月1日 4 1包 包是由 class文件组成的一个集合 2020年1月1日 4 1 1定义包 构建包语句的语法是 packagepkg1 pkg2 pkg3 例如 packagecom javaworld package语句作为Java源文件的第一条语句 如果没有package语句 则为缺省无名包 则该语句的前面只能有注释或空行 而且一个文件中最多有一条package语句 包名有层次关系 全部用小写字母 各层之间用点分割 2020年1月1日 包是类的容器 用于分割类名空间 如果不指定 默认就存在当前文件夹里面 当使用包说明时 程序不需要再引入同一个包或者该包的任何元素 如果包声明是 packagecom sun java 则此文件必须存放在Windows的com sun java目录下 2020年1月1日 包名必须唯一主要是为了交流 和便于大家的协同合作 一个使用较多的办法是反转域名 如com sun util 包名的解释Java解释器的执行顺序是 首先找到环境变量classpath 利用classpath包含的一个或者多个目录 把他们作为一种特殊的 根 使用 从这里开始搜索 搜索时会把 替换成 Windows 2020年1月1日 4 1 2导入包 import的语法是 importpkg1 pkg2 pkg3 类名 例如 importjava awt 引入整个包时 可以方便的访问包中的每个类 但是引入所有的包会占用过多的内存 因此 我们建议只引入需要的类 程序中不一定有引入语句 当需要引用某个类与当前类存储在一个物理目录下的时候 就可以直接使用 而不需要引入 2020年1月1日 4 1 3类路径 CLASSPATH 编译时 javac dCLASSPATH路径Myclass java例如 javac dd Myjavamyclass java则直接在d Myjava下创建在myclass java中指明的包目录 并把myclass class拷到该目录下 运行 java包名 类名如javapk1 pk2 类名A示例CircleDemo2 java 2020年1月1日 jdk中常用的包java lang 包含一些Java语言的核心类 如String Math Integer System和Thread 提供常用功能 java awt 包含了构成抽象窗口工具集 abstractwindowtoolkits 的多个类 这些类被用来构建和管理应用程序的图形用户界面 GUI java applet 包含applet运行所需的一些类 包含执行与网络相关的操作的类 java io 包含能提供多种输入 输出功能的类 java util 包含一些实用工具类 如定义系统特性 使用与日期日历相关的函数 2020年1月1日 4 1 4访问控制 2020年1月1日 4 2继承 面向对象的编程允许从现有类派生出新类 这称为继承 使用继承 程序员可以创建一个定义了多个相关项目共有特性的通用类 然后 其它较为具体的类可以继承该类 同时再添加自己的独有特性 在Java中定义的每一种类都是从现有类派生来的 或者是显式或者是隐式 如从Object类派生 2020年1月1日 13 4 2 1超类和子类 在Java术语中 如果类C2是从另一个类C1派生出来的 那么C2称为子类 C1称为超类 C1 C2 C3 派生 派生 超类 子类 声明一个继承超类的子类的格式 classsubclass nameextendssuperclass name bodyofcalss 示例 SimpleInheritance java 2020年1月1日 SimpleInheritance javaclassA inti j voidshowij System out println iandj i j 创建一个继承超类A的子类BclassBextendsA intk voidshowk System out println k k voidsum System out println i j k i j k 关键字extends 2020年1月1日 classSimpleInheritance publicstaticvoidmain Stringargs AsuperOb newA BsubOb newB 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 2020年1月1日 超类指父类或者基类 子类指孩子类 扩展类或者派生类 子类从它的超类中继承所有的实例变量和方法 并且可以创建新的数据和方法 因此 子类总是比其超类具有更多功能 2020年1月1日 4 2 2成员访问和继承 类的实例变量经常被声明为private 以防止未经认可的使用或滥用 尽管子类包括超类的所有成员 但它不能访问超类中被声明为private的成员 示例1 2020年1月1日 创建一个超类AclassA inti publicbedefaultprivateintj privatetoAvoidsetij intx inty i x j y classBextendsA inttotal voidsum total i j 出现错误 j不能在子类B中的方法访问 2020年1月1日 继承的优点 一旦创建了超类 可以用它创建任意数量更具体的子类 示例InfoPerson java 2020年1月1日 4 3super关键字 示例InfoPerson java 从Person类派生的类并没有体现出它们的实际上是多么有效和强大 Country的构造函数明确的初始化了Person类的name sex成员 这些重复的代码在它的超类中已经存在 这样做效率很低 而且 这意味着子类必须被同意具有访问这些成员的权力 2020年1月1日 既然封装是面向对象的基本属性 Java提供了在子类中用关键字super引用它直接的超类 super有两种通用形式 第一种调用超类的构造函数 第二种用来访问被子类的成员隐藏的超类成员 2020年1月1日 4 3 1使用super调用超类构造函数 子类可以调用超类中定义的构造函数方法 用super的下面形式 super parameter list parameter list是超类中构造函数所用到的所有参数 super 必须是在子类构造函数中的第一个执行语句 示例 DemoSuper java 2020年1月1日 与属性方法不同 超类的构造函数不能在子类中被继承 只能使用关键字super从子类的构造函数中被调用 如果没有明确地使用关键字 那么会自动调用超类中默认的构造函数 示例 C1 java注意构造函数调用的先后顺序 先执行超类构造函数 后执行子类构造函数 2020年1月1日 4 3 2使用super访问超类成员 Super的第2种形式 除了总是引用它所在子类的超类 它的行为有点像this 这种用法有下面的通用形式 super member这里 member既可以是1个方法也可以是1个实例变量 示例 UseSuper java 2020年1月1日 4 3 3创建多级层次结构 到目前为止 仅用到了只含有一个超类和一个子类的简单类层次结构 程序员可建立包含任意多层继承的类层次 例如 给定三个类A B和C C是B的一个子类 而B又是A的一个子类 当这种类型的情形发生时 每个子类继承它的所有超类的属性 C继承B和A的所有方面 示例 MultiInhert javaSuper 总是引用最接近的超类的构造函数 2020年1月1日 4 3 4何时调用构造函数 类层次结构创建以后 组成层次结构的类的构造函数以怎样的顺序被调用 假设给定一个名为B的子类和超类A 是A的构造函数在B的构造函数之前调用 还是情况相反 从C1 java中执行结果可以发现 答案 在类层次结构中 构造函数以派生的次序调用 从超类到子类 且尽管super 必须是子类构造函数的第一个执行语句 无论你用到了super 没有 这个次序不变 如果super 没有被用到 每个超类的默认的或无参数的构造函数将执行 CallingCons java 2020年1月1日 27 4 4方法重载和方法重写 1 应用程序不必为每一个派生类 子类 编写功能调用 只需要对抽象基类进行处理即可 这一招叫 以不变应万变 可以大大提高程序的可复用性 2 派生类的功能可以被基类的引用变量引用 这叫向后兼容 可以提高程序的可扩充性和可维护性 以前写的程序可以被后来程序调用不足为奇 现在写的程序 如callA方法 能调用以后写的程序 以后编写的一个类A的子类 如类D 就了不起了 2020年1月1日 28 4 4 1方法重载 overload 同一个类中的两个或多个方法可以共享同一个名称 只要它们的参数声明不一样就可以 可如下形式所示 publicvoidprintln inti publicvoidprintln floatf publicvoidprintln 参数表必须不同 返回类型可以不同方法重载是Java实现多态性的一种方式 2020年1月1日 演示方法重载publicclassOverLoad inti 3 j 4 intsum returni j intsum inta intb returna b intsum inta intb intc returna b c doublesum doublea doubleb returna b 2020年1月1日 publicstaticvoidmain String args OverLoado newOverLoad System out println o sum System out println o sum 5 6 System out println o sum 5 8 4 System out println o sum 3 2 2 15 2020年1月1日 4 4 2方法重写 覆盖 方法覆盖 override 子类可以修改从父类继承来的行为子类能创建一个与父类方法有不同功能的方法 但具有相同的名称 返回类型 参数表 子类也能创建一个与父类方法有不同功能的方法 但具有相同的名称 不同的参数表时 有不同的返回类型 覆盖发生在子类与父类之间 2020年1月1日 classA inti j A inta intb i a j b 输出i和jvoidshow System out println iandj i j 2020年1月1日 classBextendsA 创建一个类继承A intk B inta intb intc super a b k c voidshow Stringmsg 重写方法show System out println msg k classOverride publicstaticvoidmain Stringargs BsubOb newB 1 2 3 subOb show Thisisk 调用B中的方法show subOb show 调用A中的方法show 2020年1月1日 超类中的方法仅当实例可访问时的 才可被重写如果重新定义超类中的静态方法 则超类中的方法被屏蔽 2020年1月1日 4 4 3重写的方法支持多态性 方法覆盖形成了动态方法分配 实现运行时的多态性 示例 DynDispDemo java方法覆盖实现多态性的 单界面 多方法 2020年1月1日 4 4 4方法覆盖的约束条件 子类方法的名称 参数签名和返回类型必须与父类方法的名称 参数签名和返回类型一致 publicclassBase publicvoidmethod publicclassSubextendsBase publicintmethod 编译错误 返回类型不一致return0 2020年1月1日 方法覆盖的约束条件 子类方法不能缩小父类方法的访问权限 但可以扩大访问权限 publicclassParent publicvoidmethod publicclassChildextendsParent privatevoidmethod 编译错误 2020年1月1日 方法覆盖的约束条件 子类方法不能抛出比父类方法更多的异常classExceptionAextendsException classExceptionBextendsExceptionA classExceptionCexten
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能仓储系统与智慧物流的融合研究-洞察及研究
- 诸葛亮63集题目及答案
- 秋雨绵绵150字10篇范文
- 小葱成长记450字14篇
- 2025合同管理卓越案例集
- 奔驰培训资料课件
- 2025门面租赁合同模板下载
- 厦门公交司机安全培训课件
- 化工分离过程课件
- 厂房运作知识培训内容课件
- 体检中心知识
- 开办药店申请书
- 《社会化网格治理研究的国内外文献综述》5700字
- 甲状腺腔镜手术课件
- 高一 人教版 英语 必修一第四单元《Lesson 1 Listening and Speaking》课件
- 保险核保岗位招聘笔试题与参考答案(某世界500强集团)2025年
- 中建建筑工程竣工验收指南
- 新时代中小学教师职业行为十项准则
- 《品类管理》教材正文
- 初中数学教学经验分享
- 安全围栏检修方案
评论
0/150
提交评论