求租客户信息管理PPT课件.ppt_第1页
求租客户信息管理PPT课件.ppt_第2页
求租客户信息管理PPT课件.ppt_第3页
求租客户信息管理PPT课件.ppt_第4页
求租客户信息管理PPT课件.ppt_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

第4章求租客户信息管理 3 3 2020 1 2020 3 3 求租客户信息管理 类的继承 对象转型与多态 抽象类与最终类 接口 2 2 2020 3 3 3 第一讲类的继承 第4章求租客户信息管理 2020 3 3 数据描述与数据操作 类 继承的概念 继承的实现 继承的规则 属性 属性的继承 扩展和隐藏 方法 方法的继承 扩展和隐藏构造方法的继承及调用顺序 4 2020 3 3 一 引入 什么是继承 inheritance 汽车 型号 排量 颜色卡车 型号 排量 颜色 载重 汽车类classVehicle Stringmodel 汽车型号floatdisplacement 汽车排量Stringcolor 汽车颜色 卡车类classTruck Stringmodel 卡车型号floatdisplacement 卡车排量Stringcolor 卡车颜色floatcarry 卡车载重 5 2020 3 3 使用继承 代码重用 使用继承描述汽车类和卡车类 汽车类classVehicle Stringmodel floatdisplacement Stringcolor 描述卡车类 继承汽车类classTruckextendsVehicle floatload 卡车载重 其他三个特性继承汽车类的 可以不要重复定义 继承是利用已存在的类定义新的类 可以实现代码的重复使用 提高效率继承是类之间的一种一般和特殊的关系 思考 现实生活中还有哪些对象之间存在继承关系 6 2020 3 3 二 类的继承语法规范 Java中被继承的类叫父类 超类 基类 继承一个类产生的新类叫子类 派生类 创建类时通过extends指明是已有类的子类 类修饰符 class子类名extends父类名 类体 定义子类自己的成员变量和成员方法或重写父类的方法 可以来自系统类库 也可以是用户自定义类 7 2020 3 3 Java中类的继承体现 子类继承父类的体现 继承父类的所有成员变量和方法 重写父类的方法 增加自己新的属性和方法 子类是作为另一个类的扩充或修正而定义的一个类 子类总比父类多一些东西 父类有的子类也有父类没有的 子类可以增加父类有的 方法 子类可以改变 8 2020 3 3 类的继承规范 说明 1 Java不支持多重继承 只支持单继承 每个子类只能有一个父类 2 继承关系可以传递每个子类也可能成为将来某个类的父类直接父类 子类直接继承的类间接父类 两级或两级以上的关系 3 Java中若未明确指定父类 则默认继承java lang Object类 9 2020 3 3 Java类层次结构 除了根类 每个类都一个唯一的父类 10 2020 3 3 三 继承的实现 父类定义 packagecom ext 图形类 父类publicclassShape Stringtype 图形类别publicvoidsetType Stringtype this type type publicStringgetType returntype 显示类别信息publicvoidshowInfo System out println type publicvoidgetArea 形状的类别未确定 无法计算面积 方法体为空 11 2020 3 3 继承的实现 子类定义 packagecom ext 圆类 子类publicclassCircleextendsShape doubleradius 圆的半径publicvoidsetRadius doubleradius this radius radius publicdoublegetRadius returnradius publicvoidgetArea showInfo 直接调用父类的方法System out println 其面积为 Math PI radius radius publicdoublegetPerimeter return2 Math PI radius 思考 Circle类中有哪些属性和方法 12 2020 3 3 继承的实现 测试类定义 packagecom ext 测试类publicTestCircle publicstaticvoidmain String args CirclemyCircle newCircle myCircle setRadius 2 1 Circle自己新定义的方法myCircle setType 这是一个圆 调用继承的父类方法myCircle getArea 调用Circle重写的父类的方法doubleperimeter myCircle getPerimeter System out println 其周长为 perimeter 13 2020 3 3 课堂实践 定义图形类的子类 三角形类和矩形类 分别计算其面积及周长 做一做 14 2020 3 3 四 继承规则 子类继承父类所有的成员和方法 除了构造方法 父类中private修饰的成员变量不能被子类直接访问 若父类和子类不在同一个包子类继承父类时要求能够找到超类 因此父类必须有package语句 子类必须有import语句 父类还必须有public修饰符 15 2020 3 3 类的继承 继承规则图示 包2 子类2 PublicSuperClass 子类1 publicintb protectedintc inta publicintb protectedintc privateintd inta publicintb protectedintc 包1 Yes Yes Yes Yes Yes no import no表示不能直接访问 Yes表示能被继承且能直接访问 16 2020 3 3 五 变量隐藏和方法重写 子类对父类可做扩展和特殊化创建新的成员 变量或方法重新定义父类中已有的变量 变量隐藏重新定义父类中已有的方法 方法重写 覆盖 overwrite或override 17 2020 3 3 变量隐藏 子类重新定义从父类继承的完全相同的变量称为变量隐藏 变量隐藏后变量的处理当子类执行继承自父类的操作时 处理的是父类的变量当子类执行自己定义的方法时 操作的是自己的变量 把父类的变量 隐藏 起来 classPerson Stringid Stringname Stringaddress publicvoidshowName System out println name classStudentextendsPerson Stringaddress 重新定义父类变量publicvoidshowInfo showName 调用父类的方法System out println Student address 使用的是子类的address 18 2020 3 3 方法的重写 覆盖 重写是子类根据需要重新定义继承自父类的方法 使子类具有自己的行为 子类中的重写的方法应与父类中的被覆盖的方法有完全相同的 方法名称 参数列表 返回值类型 重写时 修改方法的修饰权限只能从小到大private default protected public不能重写父类的final方法static 子类可以继承父类的静态方法 但不能重写 classEmployee Stringname publicvoidshowInfo System out println name classManagerextendsEmployee Stringdepartment publicvoidshowInfo System out println name System out println Managerof department 19 2020 3 3 示例 隐藏和覆盖 classMyClass protectedStrings amemberofMyClass protectedvoidtest System out println s publicclassMySubClassextendsMyClass publicStrings amemberofMySubClass 隐藏publicvoidtest 重写super test System out println s publicstaticvoidmain String args MySubClassmsc newMySubClass System out println msc s msc test amemberofMySubClassamemberofMyClassamemberofMySubClass 20 2020 3 3 思考 方法重载和重写的区别 重载 一个类中 同名方法参数类型不同或个数不等重写 不同类的同名方法 两个类之间是继承关系子类对父类方法的重新定义重写一定是伴随着继承发生的 没有继承就没有重写 21 2020 3 3 六 this和super 系统默认 每个类有null this和super三个域 直接使用this引用自身对象super引用父类对象this的主要作用是引用自身对象的方法 变量及构造方法 super用来引用父类中的 被覆盖的 方法 被隐藏的 变量及构造方法 this和super可以调用当前对象或父类对象的构造函数 22 2020 3 3 做一做 理解动物类之间的继承关系 通过Java类的继承体现各种动物之间的关系 编写动物世界的继承关系代码 动物 Animal 包括山羊 Goat 和狼 Wolf 它们吃 eat 的行为不同 山羊吃草 狼吃肉 但走路 walk 的行为是一致的 通过继承实现以上需求 并编写AnimalTest测试类进行测试 23 2020 3 3 七 构造方法的继承原则 当生成子类对象时 JAVA默认首先去调用父类的不带参数的构造方法 然后执行该构造方法 生成父类的对象 接下来 再去调用子类的构造方法 生成子类的对象 若父类没有无参的构造方法 则子类必须在自己的构造方法中使用super 显式调用父类的某个有参构造方法 如果子类使用super 显式的调用父类的某个构造方法 那么在执行的时候就会寻找与super 所对应的构造方法 而不会再去寻找父类的不带参数的构造方法 与this 一样 它也必须要作为构造方法的第一条语句 24 2020 3 3 publicclassAextendsF5 privateF1f1 newF1 privateF2f2 newF2 A System out println A publicstaticvoidmain Stringargs Aa newA classF1 F1 System out println F1 classF2 F2 System out println F2 classF3 F3 System out println F3 classF4extendsF3 F4 System out println F4 classF5extendsF4 F5 System out println F5 构造方法的调用顺序 面试和资格考试重点 F3F4F5F1F2A 有父类的话先调用父类的构造方法 如果父类之上还有父类 则继续向上调用 直到最顶层父类为止 再一层一层向下调用其它父类的构造方法 当调用完最靠近子类的父类的构造方法时 执行本子类成员对象的构造方法 执行子类的构造方法 25 2020 3 3 小结 继承可以实现代码复用继承规则变量隐藏方法重写 重载的区别 this和super关键字构造方法的继承和调用顺序 26 2020 3 3 27 第二讲对象转型与多态 第4章求租客户信息管理 2020 3 3 引入 什么是对象转型 引入 父类Shape 子类Circle 有如下定义 Shapes1 newShape Circlec1 newCircle 问题 1 s1 c1 赋值是否合法 2 c1 s1 赋值是否合法 对象转型 类型之间的相互转换 28 2020 3 3 一 对象转型 父类变量直接引用子类对象 向上转型upcasting Studentstu newStudent Personp newStudent 父类引用新创建的子类对象Personp1 stu 父类的引用变量引用子类对象父类引用只能调用父类自己的方法 子类新定义的方法不能访问父类对象赋给子类变量 向下转型downcasting Students Student p1 必须使用强制类型转换必须确保该父类变量目前引用的是子类对象 29 2020 3 3 示例 对象转型 classSuperClass intx classSubClassextendsSuperClass inty charch publicclassUseSuperSub publicstaticvoidmain String args SuperClasssp sp ref SubClasssb sb ref sp newSuperClass sb newSubClass sp ref sb 向上转型sb ref SubClass sp ref 向下转型 30 2020 3 3 instanceof运算符应用 可以使用 引用变量instanceof类名 来判断该引用变量所 指向 的对象是否属于该类或该类的子类示例 一个处理网上购书系统 其中有这样三个类 publicdoublecalculate Bookbook if bookinstanceofComputerBook 处理计算机类书的打折 if bookinstanceofNovel 处理小说类书的打折 publicclassBook 省略细节 publicclassComputerBookextendsBook 省略细节 publicclassNovelextendsBook 省略细节 在处理程序里有一个方法 接受一个Book类型的对象 计算打折金额 假设两种打折方法不同 而传入的Book对象可能是两种中的任何一种 所以要用instanceof来判断 可以用一个方法处理两种子类 31 2020 3 3 课堂实践 做一做 定义一个学生类Student 包含属性 学号 no姓名 name方法 类Student带参数的构造方法 在构造方法中通过形参完成对成员变量的赋值操作 重写父类 Object 的equals 方法 根据学号判断对象是否相同 若学号相同 则结果为true 否则结果为false 编写一个测试类StudentTest 创建2个对象 判断他们是否相同 32 2020 3 3 二 引入 多态polymorphism 分析下列程序执行过程PublicclassTest publicstaticvoidmain String args Testt newTest Animala newAnimal name Dogd newDog dogname black Catc newCat catname blue t f a t f d t f c publicvoidf Animala System out println name a name if ainstanceofDog Dogdog Dog a System out println fur dog furColor elseif ainstanceofCat Catcat Cat a System out println eyes cat eyesColor 33 33 2020 3 3 面向对象的核心 多态 多态分为静态多态 编译时多态 和动态多态 运行时多态 静态多态 编译时多态通过方法重载实现 本质是用一个方法名来命名一组方法 这一组方法在参数个数 参数类型或次序上有区别 编译时编译程序进行匹配 决定调用哪一个方法 动态多态 运行时多态通过方法重写实现 是执行期间 而非编译期间 判断所引用对象的实际类型 根据实际类型调用其相应的方法 34 34 2020 3 3 多态的使用 运行时多态 动态多态 要满足的条件 子类对象的方法调用必须通过一个基类类型的变量进行调用的方法必须被声明为父类的一个成员调用的方法必须在子类中被重写子类和父类有相同的方法头部子类方法的访问权限不能比基类有更多的限制当使用一个父类变量调用一个方法时 多态会根据存储的对象的类型而不是引用变量的类型来选择要调用的方法 因为父类的变量可以引用任何子类的对象 因此直到程序执行时才知道引用的对象类型 程序可以在运行时自动适应不同类型的数据并进行相应的处理 35 35 2020 3 3 运行时多态 classA inti j A inti intj this i i this j j intadd returni j classBextendsA B inti intj super i j intmultiply return0 classCextendsB C inti intj super i j intmuliply returni j classInheritance publicstaticvoidmain Stringargs Bx newC 6 8 System out println i j x mulitply 通过x调用子类C重重写的mulitply方法System out println i j x add 调用父类add方法 该方法未被子类重写 i j 48i j 14 36 2020 3 3 37 小结 动态绑定 多态 多态 不同的对象收到同一个消息可产生完全不同的效果 多态的效果 用户发送一个通用的消息 而实现的细节则由接收对象自行决定 多态的作用 增强了操作的透明性 可理解性和可扩展性 增强了软件的灵活性和重用性 动态多态存在的三个必要条件 要有继承要有方法的重写父类引用指向子类对象 37 2020 3 3 课堂实践 定义类Person及其子类Employee Employee的子类Manager 每个类定义下列成员变量 Person类 姓名 年龄Employee类 工号 工资Manager类 职务名称每个类定义构造方法初始化所有变量 重写toString 方法输出所有成员变量值 定义测试类PolyTest 创建这些类的对象 调用toString 方法进行测试 做一做 38 2020 3 3 39 第三讲抽象类与最终类 第4章求租客户信息管理 2020 3 3 一 抽象类和抽象方法 抽象类abstract修饰publicabstractclass抽象类名 类体 抽象方法abstract修饰权限修饰符abstract返回值类型方法名 形式参数列表 定义抽象类的目的 用它作为基类去创建派生类 抽象类的作用是作为一个类族中的共同基类 图书类定义为抽象类 40 2020 3 3 41 示例 抽象方法和抽象类 abstractclassShape publicabstractvoidgetArea classRectextendsShape doublewidth doubleheight Rect doublew doubleh width w height h publicvoidgetArea System out println TheareaofRectis width height classCircleextendsShape doubleradius finaldoublepi Math PI Circle doubler radius r publicvoidgetArea System out println TheareaofCircleis pi radius radius publicclassTestShape staticvoidshow Shapes s getArea publicstaticvoidmain String args Rectr newRect 1 2 Circlec newCircle 2 show r show c 41 2020 3 3 抽象类的特点 抽象类不能用new创建抽象类的实例 对象 和具体类一样 类中可以有成员变量和成员方法 包括构造方法 但与具体类不同的是 抽象类中可以定义抽象方法 抽象方法只能出现在抽象类中 但抽象类中可以没有抽象方法 抽象类中的所有抽象方法必须在其非抽象子类中加以实现 否则子类也必须声明为抽象类 抽象方法构造方法不能被声明为抽象方法 静态成员方法不能被声明为抽象方法 abstract和static不能同时存在 任何包含抽象方法的类必须被声明为抽象类 42 2020 3 3 二 最终类和最终方法 最终类final修饰不能被继承 即不能声明它的子类 目的 为避免盲目继承 抽象类不能被声明为最终类 它的方法默认是最终方法 但属性可以定义为final和非final 最终方法final修饰不能被它的子类覆盖 它只是说明这个方法已经固定下来 在当前类中和该类的子类中都一样 最终类中的方法默认也是最终方法 final称为最终修饰符 可以用来修饰类 方法 属性 变量 publicfinalclassMathextendsObject 数学类 最终类 43 2020 3 3 抽象类和最终类 抽象类的目的就是为了被继承最终类的目的是不被继承一个类是不能用abstract和final同时修饰的 44 2020 3 3 小结 对象转型子类引用父类父类引用子类instanceof多态静态多态动态多态抽象类抽象类和抽象方法最终类 45 2020 3 3 46 第四讲接口 第4章求租客户信息管理 2020 3 3 一 Java语言的接口 interface JAVA只支持单继承 每个类只能有一个超类 接口用于实现多继承 一个类可以实现多个接口 达到多继承的目的 接口定义了若干个抽象方法和常量 形成完成一个特定功能的属性集合 接口是由常量和抽象方法组成的特殊类 接口中的属性都是用final修饰的常量 方法都是用abstract修饰的没有方法体的抽象方法 接口中的方法只提供 做什么 不提供 怎么做 47 2020 3 3 48 接口 interface 接口可用于定义方法原型和常量值 从本质上讲 接口是一种特殊的抽象类 这种抽象类中只包含常量和方法的定义 而没有方法的实现 通过接口可以实现不相关类的相同行为 而不需要考虑这些类之间的层次关系 通过接口可以指明多个类需要实现的一组方法 通过接口可以在运行时动态定位类所需调用的方法 48 2020 3 3 49 接口的定义 接口 interface 作为特殊形式的抽象类 和类 class 在使用上具有类似的约束 一个public接口只能定义在同名的 java文件中 public interfaceinterfaceName extendsSuperInterfaceList 常量定义和方法定义 public static final 类型变量名 常量值 public abstract native 返回值类型方法名 参数列表 throws异常列表 publicinterfaceMyIf intMAXSIZE 1024 publicabstractvoidmM Stringname 49 2020 3 3 50 接口的定义 interface 接口体的定义有两部分 属性的声明 方法的声明系统默认 属性都是publicstaticfinal 成员变量声明后立即赋值 方法都是publicabstract接口具有继承性 通过关键字extends声明该接口是某父类的派生接口 一个接口可以有多个父接口 它们之间用逗号分隔 50 2020 3 3 51 接口的实现 implements 定义类实现接口 用implements关键字说明该类将要实现哪个接口 具体地实现接口中方法所规定的功能 修饰符 class类名implements 说明 如果某个类实现了接口 这个类就可以访问接口中的常量类在实现方法时必须使用修饰符public如果实现某个接口的类不是abstract的抽象类 则在类的定义部分必须为所有抽象方法定义方法体如果实现某接口的类是abstract的抽象类 则在类的定义部分可以不实现接口的所有方法 51 2020 3 3 52 举例 接口的定义与简单实现 interfaceCalArea doublepi 3 14 doublecal doubler classaimplementsCalArea publicdoublecal doubler returnpi r r 52 2020 3 3 53 课堂实践 定义接口Shape 其中包含方法doublegetPeremeter 求周长 doublegetArea 求面积定义一个矩形类 实现此接口 并自行扩充成员变量和方法 定义一个方法一次直接显示长和宽 周长和面积 定义一个测试类 测试矩形类 53 2020 3 3 54 多重继承 利用接口可实现多重继承 类可以有父类的同时实现多个接口一个类实现了不止一个接口 为了调用在其它接口中声明的方法 需要使用对应接口类型的变量来存储对象的引用 或将对象的引用进行类型强制转换 转换为它实际的类型 54 2020 3 3 55 接口和多态 不能生成一个接口类型的对象 但可以生成一个接口类型的引用变量Shapetds null 接口类型的引用变量可以指向任何实现接口的类的对象 也就意味着可以使用这个变量多态调用在接口中声明的方法Shapes s newRectangle 3 4 s getArea s newCircle 3 s getArea 55 2020 3 3 56 接口的应用描述 声明多个类必须实现的方法 编程者可以把用于完成特定功能的方法组织成相对独立的集合体 接口 凡是需要实现这种特定功能的类 都必须实现这个接口 利用接口模拟多继承 接口在保持单继承优点的前提下 使Java程序的类层次结构更加合理 更符合实际情况 很多不同类型的对象可以共享一组通用的操作定义一组类变量供不同用户使用 56 2020 3 3 57 示例一 接口的定义与实现 interfaceGreeting voidspeak voidwrite classChineseGreetingimplementsGreeting publicvoidspeak System out println 您好 publicvoidwrite 方法体必须有 可以为空 classAmericanGree

温馨提示

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

评论

0/150

提交评论