JAVA学习-第5章类设计.ppt

上传人:max****ui 文档编号:6360143 上传时间:2020-02-23 格式:PPT 页数:36 大小:599KB
返回 下载 相关 举报
JAVA学习-第5章类设计.ppt_第1页
第1页 / 共36页
JAVA学习-第5章类设计.ppt_第2页
第2页 / 共36页
JAVA学习-第5章类设计.ppt_第3页
第3页 / 共36页
点击查看更多>>
资源描述
江苏大学计算机学院Version2 0 第5章类设计 Page2 本章内容 定义继承 多态 重载 覆盖和虚拟方法调用使用访问修饰符protected和缺省 友元包 描述构造器和方法重载的概念描述完整对象结构和初始化操作了解转型对象的使用描述重载方法和具有变量参数的方法描述重载构造器和调用父类构造器了解Wrapper类了解原始类型的自动包装 Page3 子类化 在编程时 通常要创建某个对象的模型 然后需要在此模型基础上设计更专门化的模型 例如 要为经理建立一个模型 经理是名雇员 但是又具有区别于一般雇员的其他特性这个例子说明了Manager类和Empolyee类之间的数据复制 此外有很多方法对Manager和Empolyee都适用 因此 需要从已有的类创建一个新类的方法 这种方法称为子类化 Page4 继承 继承指从父类获取一组属性和相关的行为 利用继承 可以先创建一个共有属性的一般类 根据该一般类再创建具有特殊属性的新类 新类继承一般类的状态和行为 并根据需要增加它自己的新的状态和行为 由继承而得到的类称为子类 被继承的类称为父类继承的好处 减少代码中的冗余代码容易维护扩展现有类的功能 publicclassEmployee Stringname doublesalary DatebirthDate publicStringgetDetails publicclassEmployeeextendsEmployee Stringdepartment Page5 继承 续 单重继承子类来源于一个超类 单重继承的示例如下所示 Page6 继承 续 Java不支持多重继承 接口提供了多重继承的好处而没有缺点 Java类实现继承的语法如下所示 class extendssuperclass Page7 子类 在Java中通过使用关键字extends来声明一个子类publicclass子类名extends父类名 例如 publicclassManagerextendsEmployee 如果一个类没有声明中没有使用extends关键字 这个类被系统默认是Object的直接子类 Object是java lang包中的类通过继承 子类自动拥有了父类 superclass 的所有成员 成员变量和方法 Page8 子类的继承性 类有可以有两种重要的成员 成员变量和方法 子类的成员中有一部分是子类自己声明定义的 另一部分是从它的父类继承的 所谓子类继承父类的成员变量作为自己的一个成员变量 就好象它们是在子类中直接声明一样 可以被子类中自己声明的任何实例方法操作 所谓子类继承父类的方法作为子类中的一个方法 就象它们是在子类中直接声明一样 可以被子类中自己声明的任何实例方法调用 Page9 子类和父类在同一包中的继承性 如果子类和父类在同一个包中 那么 子类自然地继承了其父类中不是private的成员变量作为自己的成员变量 并且也自然地继承了父类中不是private的方法作为自己的方法 继承的成员或方法的访问权限保持不变 classParent privateintn private 1 intn friendly 2 protectedintn protected 3 publicintn public 4 classChildextendsParent publicvoidf n private 10 n friendly 20 n protected 30 n public 40 Page10 子类和父类不在同一包中的继承性 如果子类和父类不在同一个包中 那么 子类继承了父类的protected public成员变量做为子类的成员变量 并且继承了父类的protected public方法为子类的方法 继承的成员或方法的访问权限保持不变 如果子类和父类不在同一个包里 子类不能继承父类的友好变量和友好方法 Page11 类创建了一个对象之后 该对象可以通过 运算符操作自己的变量 使用类中的方法 但对象操作自己的变量和使用类中的方法是有一定限制的 所谓访问权限是指对象是否可以通过 运算符操作自己的变量或通过 运算符使用类中的方法 访问限制修饰符有private protected default和public 都是Java的关键字 用来修饰成员变量或方法 访问控制 AccessControl Page12 访问控制 AccessControl Java权限修饰符publicprotectedprivate置于类的成员定义前 用来限定其他对象对该类对象成员的访问权限 对于class的权限修饰只可以用public和default innerclass除外 public类可以在任意地方被访问default类只可以被同一个包内部的类访问 TestAccess java编写程序验证Java中的访问控制 Page13 覆盖方法 子类根据需要可修改从父类继承的方法 子类可创建具有与父方法的不同功能的方法 但是具有以下相同的项 名称返回类型参数列表覆盖方法不能使用比被覆盖方法更严格的访问权限 Page14 覆盖方法 classPerson privateStringname privateintage publicvoidsetName Stringname this name name publicvoidsetAge intage this age age publicStringgetName returnname publicintgetAge returnage publicStringgetInfo return Name name n age age classStudentextendsPerson privateStringschool publicStringgetSchool returnschool publicvoidsetSchool Stringschool this school school publicStringgetInfo return Name getName nage getAge nschool school 覆盖方法的规则覆盖方法的参数顺序和名称应该与超类方法的相同 被覆盖和覆盖方法的返回类型应该是相同的 覆盖方法的可访问性不能少于它所覆盖的方法 例如 如果覆盖方法在超类中声明为公共 您不能用子类中的私有关键字来覆盖它 Page15 覆盖方法 续 子类方法通过使用super关键字可调用超类的方法 关键字super在类中使用来引用其超类 关键字super用来引用超类的成员 包括数据属性和方法 调用的行为不必一定在超类中 它可以是层次结构中的上一层 使用super关键字调用覆盖方法 publicclassEmployee privateStringname privatedoublesalary privateDatebirthDate publicStringgetDetails return Name name nSalary salary Page16 覆盖方法 续 publicclassManagerextendsEmployee privateStringdepartment publicStringgetDetails callparentmethodreturnsuper getDetails nDepartment department Page17 多态 多态是具有许多不同形态的功能 例如 Manager类具有对Employee类的方法的访问权 对象只有一种形态 在构造时给定的那一种 引用变量可引用不同形态的对象 Java编程语言允许您引用具有父类的类型的变量的对象 例如 Employeee newManager legale department Sales illegal Page18 虚拟方法调用 获得的是运行时与变量引用相关对象的行为 该行为不是由编译时的变量类型决定的 这一行为通常称为虚拟方法的调用 虚拟方法调用如下所示执行 Employeee newManager e getDetails 编译时类型和运行时类型调用具有以下特征 方法名必须是声明的变量类型的成员 在此例中Employee具有名称为getDetails的方法 使用的方法实现基于运行时对象的类型 在此例中Manager类具有getDetails方法的实现 Page19 异类集合 异类集合 具有相同类的类型的对象集合称之为同类集合 例如 MyDate dates newMyDate 2 dates 0 newMyDate 22 12 1964 dates 1 newMyDate 22 7 1964 具有不同类的类型的对象集合称之为异类集合 例如 Employee staff newEmployee 1024 staff 0 newManager staff 1 newEmployee staff 2 newEngineer Object类 在java中所有的类都是Object类的子类 所以 一个异类集合可以包含所有的对象 基本数据类型除外 Page20 instanceof运算符 假定对象可以通过引用传递给他们的父类 而且有时候不知道确切是声明对象 这真是instanceof运算符的目的 假定类的层次publicclassManagerextendsEmployeepublicclassEngineerextendsEmployee如果通过Employee类型的引用接受对象 结果将是Manager或者Engineer 可以用instanceof运算符进行测试publicvoiddoSomething Employeee if einstanceofManager ProcessaManager elseif einstanceofEngineer ProcessaManager else ProcessanyothertypeofEmployee Page21 转型对象 转型对象用在其中已接收对父类的引用并想要访问子类对象的全部功能的情况 使用instanceof来测试对象的类型 通过转型复原对象的全部功能 使用以下指导原则检查适当的转型 一个基类的引用类型变量可以 指向 其子类的对象 一个基类的引用不可以访问其子类对象新增加的成员 属性和方法 可以使用引用变量instanceof类名来判断该引用型变量所 指向 的对象是否属于该类或该类的子类 子类的对象可以当作基类的对象来使用称作向上转型 upcasting 反之称为向下转型 downcasting Page22 转型对象 publicvoiddoSomething Employeee if einstanceofManager Managerm Manager e System out println Thisisthemanagerof m getDepartment 此处如果不转型执行e getDepartment 方法将失败 编译器无法在Employee类中找到getDepartment 方法 Page23 运行如下程序publicclassTest publicstaticvoidmain Stringargs Personp newPerson 1 20 p info p info hello 方法的重载 方法的重载是指一个类中可以定义有相同的名字 但参数不同的多个方法 返回类型可以不同 调用时 会根据不同的参数表选择对应的方法 例如 在Person类中添加如下方法 voidinfo System out println Myidis id voidinfo Stringt System out println t id age TestOverload2 java TestOverload1 java Page24 使用变量参数的方法 重载的一个改变是要知道何时需要一个方法 而该方法带有相同类型的任意数量的参数publicclassStatistics publicclassfloataverage intx1 intx2 publicclassfloataverage intx1 intx2 intx3 publicclassfloataverage intx1 intx2 intx3 intx4 varargs或变量参数是由J2SE5 0提供的功能 它帮助将相同类型的参数的变量数量作为参数传递给方法 它可用于当具有许多共享相同功能的重载方法 Page25 使用变量参数的方法 续 以下示例示范了varargs的使用 publicclassStatistics publicfloataverage int nums intsum 0 for intx nums sum x return float sum nums length 可通过作为整数传递任意数量的参数来调用average方法 nums是类型int 的数组 Page26 构造方法的重载 与普通方法一样 构造方法也可以重载 参数列表必须不同例如 修改Person类的构造方法为 Person id 0 age 20 Person inti id 0 age i Person intn inti id n age i Page27 构造方法的重载 续 重载构造器的示例 publicclassEmployee privatestaticfinaldoubleBASE SALARY 15000 00 privateStringname privatedoublesalary privateDatebirthDate publicEmployee Stringname doublesalary DateDoB this name name this salary salary this birthDate DoB publicEmployee Stringname doublesalary this name salary null publicEmployee Stringname DateDoB this name BASE SALARY DoB moreEmployeecode 构造器中的this关键字必须在构造器代码中的第一行 初始化所有实例变量 用作对第一个构造器的转发调用 在类常量BASE SALARY中调用第一个构造器传递 Page28 构造器不被继承 子类从超类 父类 继承所有方法和变量 子类不从超类继承构造器 包括构造器的两种方式 使用默认构造器写一个或多个显式构造器 Page29 继承中的构造方法 子类的构造的过程中必须调用其基类的构造方法 子类可以在自己的构造方法中使用super argument list 调用基类的构造方法 使用this agumentlist 调用本类另外的构造方法如果调用super 必须写在子类构造方法的第一句如果子类的构造方法中没有显式地调用基类构造方法 则系统默认调用基类无参数的构造方法 如果子类构造方法中既没有显式调用基类构造方法 而基类中又没有无参的构造方法 则编译出错 TestSuperSub java Page30 调用父类构造器 续 调用父类构造器的示例 publicclassManagerextendsEmployee privateStringdepartment publicManager Stringname doublesalary Stringdept super name salary department dept publicManager Stringname Stringdept super name department dept publicManager Stringdept Thiscodefails nosuper department dept moreManagercode Page31 Object类 Object类是Java中的所有类的根基类 没有extends子句的类声明暗含extendsObject 例如 publicclassEmployee 等同于 publicclassEmployeeextendsObject object类的两个重要方法 equals toString Page32 equals方法 Object类中定义有 publicbooleanequals Objectobj 方法提供定义对象是否 相等 的逻辑 Object的equals方法定义为 x equals y 当x和y是同一个对象的应用时返回true否则返回falseJ2SDK提供的一些类 如String Date等 重写了Object的equals方法 调用这些类的equals方法 x equals y 当x和y所引用的对象是同一类对象且属性内容相等时 并不一定是相同对象 返回true否则返回false 可以根据需要在用户自定义类型中覆盖 重写 equals方法 TestEQ TestEquals java Page33 toString方法 toString 方法具有以下特征 Object类中定义有publicStringtoString 方法 其返回值是String类型 描述当前对象的有关信息 此方法将对象转换为String 在字符串拼接中使用此方法 在进行String与其它类型数据的连接操作时 如 System out println info person 将自动调用该对象类的toString 方法覆盖此方法来提供关于使用可读格式用户定义对象的信息 使用wrapper类的toString 静态方法将原始类型转换为字符串 Page34 Wrapper类 Java编程语言提供wrapper类来操作作为对象的原始数据元素 包装类 如 Integer Double等 这些类封装了一个相应的基本数据类型数值 并为其提供了一系列操作 以java lang Integer类为例 构造方法 Integer intvalue Integer Strings 每个Java原始数据类型在java lang包中具有相应的wrapper类 使用wrapper类的原始包装的示例 intpInt 420 IntegerwInt newInteger pInt thisiscalledboxingintp2 wInt intValue thisiscalledunboxing 包装类常见方法 以下方法以java lang Integer为例publicstaticfinalintMAX VALUE最大的int型数 231 1 publicstaticfinalintMIN VALUE最小的int型数 231 publiclonglongValue 返回封装数据的long型值publicdoubledoubleValue 返回封装数据的double型值publicintintValue 返回封装数据的int型值publicstaticintparseInt Strings throwsNumberFormatException将字符串解析成int型数据 返回该数据publicstaticIntegervalueOf Strings throwsNumberFormatException返回Integer对象 其中封装的整型数据为字符串s所表示 TestPrimitive java Page36 原始类型的自动包装 自动包装特性使您无需wrapper类即可赋值和检索原始类型 原始自动包装的示例 intpInt 420 IntegerwInt pInt thisiscalledautoboxingintp2 wInt thisiscalledautounboxingJ2SE5 0编译器当向wrapper类的类型的变量赋一个原始的值时 将自动创建wrapper对象 编译器当从wrapper对象向原始变量赋值时 还将抽取原始值
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!