- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6.8 类的继承 对象造型与instanceof运算符 4. 与基本类型一样,被造型的对象(实际上是对象的引用)的类型没有发生变化,但不一样的是,对象造型并不会得到一个临时对象,如上述s3和s4指向的是同一对象。 6.8 类的继承 对象造型与instanceof运算符 有时,程序需要判断某个对象的所属类型,以便下一步操作,此时可以使用instanceof(Java的关键字,注意instance与of之间无空格)运算符: 上述语法实际上是一个返回boolean值的表达式,其逻辑是判断给定对象是否“是一种”给定类型(并非判断对象的真实类型)。 6.8 类的继承 根类Object 在Java中,一切皆是对象——所有的类都直接或间接继承自java.lang.Object类。Object类定义了一些常用方法: 1. int hashCode( ) 得到用以标识对象的哈希码。该方法默认将对象在内存中的地址转换为一个int型整数以作为该对象的哈希码。因此,若未重写hashCode方法,则任何对象的哈希码都是唯一的。在判断子类对象的等价性,特别是使用第13章介绍的容器框架类时,通常要重写该方法。 2. final Class getClass( ) 得到对象所属的类型。java.lang.Class是类类型(注意不是class关键字),其包含了类的所有信息(如类名、包名、字段和方法等)。任何对象所属的类是确定的,故该方法不能被子类重写。通过Class类,程序可以在运行时动态访问类的信息,具体将在第16章介绍。 6.8 类的继承 根类Object 3. String toString( ) 将对象转换为字符串,该方法的源代码如: 可见,Object类将对象的类名通过@字符与对象哈希码的16进制形式连接以作为对象的字符串描述——这通常不能满足子类的要求,因此,若需要自定义子类对象的文字描述,通常要重写该方法。 【例6.18】 6.8 类的继承 对象的等价性 以“==”运算符比较两个基本类型的变量时,其比较的是值。若用于对象,则比较的是对象的引用 。 很多情况下,编程者并不关心两个对象的引用是否相等,而关心对象的“内容”是否相同。例如,若两个产品对象的编号相同,则认为它们是“相等”的,显然“==”运算符不能满足这样的需求——因为两个对象各自占据着不同的内存单元。 Object类提供了equals方法用于比较两个对象,其完整源代码如: 容易看出,equals方法与“==”运算符的实质是一样的,因此,若需要自定义子类对象的判等逻辑,通常要重写该方法。 6.9 综合范例5:简单工厂模式 简单工厂(Simple Factory)模式是工厂模式的一种,用于创建对象(如同工厂生产产品),又称为静态工厂方法模式。 抽象产品类有若干具体产品子类,外界通过产品工厂类获得各个具体产品类的对象。 6.10 枚举 枚举(Enumeration)类型实际上是由若干常量构成的集合,这些常量称为枚举常量,声明为枚举类型的变量的取值只能是这些枚举常量中的某一个。 1. 从语法上来看,虽然枚举类型使用了enum而非class关键字,但枚举类型实质上就是一个类——可以包含字段、构造方法或其它方法。 2. 当枚举类型包含字段和方法时,最后一个枚举常量后的分号不能省略。 3. 每个枚举常量都会被分配一个int型的值——序数,从0开始,以1递增。 4. 枚举常量可以出现在switch语句中的case关键字之后,但此时不能使用完全限定名,即枚举常量前不能跟“枚举类型名.”——编译器根据switch后括号内的枚举对象知道case后的枚举常量是在哪个枚举类型中定义的。 6.10 枚举 所有的枚举类型实际上都隐含继承自java.lang.Enum类,因此不能再继承其它的类。Enum类定义的方法主要包括: 编译器还会为每个枚举类型生成一个无参的静态方法values,该方法返回所有枚举常量构成的数组。 每个枚举常量都是枚举类型,而并不是其序数所属的int型,因此,不能像操作int型数据那样操作枚举常量。此外,与C/C++不同,不允许显式改变枚举常量的序数,也不允许将int型造型为枚举常量。 6.10 枚举 有时,可能需要自定义枚举常量的字符串描述,此时可以为枚举类型编写构造方法,并以“枚举常量(字符串)”的形式来自定义枚举常量。 作业和实验 作业 习题6 简答题:2、3、5、6、7、9、12、14、19、20、21、24 阅读程序题:1、2 实验 实验5: 类与对象 6.3 方法 构造方法 调用构造方法:【ConstructorDemo.java
原创力文档


文档评论(0)