终极对象有什么?
如果你是Java,那你会想要让每个对象都带有什么行为?嗯……来个可以判断某对象是否与其他对象相等的方法如何?再加上一个可以说明它是什么类的方法怎样?或许还会需要一个产生对象哈希代码的方法?你可以运用哈希表上的对象(我们会在第17章和附录B中讨论哈希表)。
你知道怎样吗?对象的确有上面所说的方法。那还不是全部的方法,但目前我们只关心这几个。
|
|
|
问:Object这个类是抽象的吗?
答:不是。至少不是正式的 Java 抽象类。因为它可以被所有类继承下来的方法都实现程序代码,所以没有必须被覆盖过的方法。
问:那是否可以覆盖过Object的方法?
答:部分可以。但是有些被标记为final,这代表你不能覆盖掉它们。强烈建议你用自己写的类去覆盖掉hastCode()、equals()以及toString()。
问:如果ArrayList方法是通用的,那ArrayListA<DotCom>是什么意思?
答:限制它的类型。在Java 5.0之前无法限制它的类型。如果你写成ArrayList<Dog>,则此ArrayList受限只能保存Dog的对象。这种新型的语法会在后面的章节有更多的说明。
问: Ob j e c t 类是具体的。怎么会允许有人去创建Object的对象呢?这不就跟Animal对象一样不合理吗?
答:好问题!为何要允许创建出Object的实例呢?因为有时候你就是会需要一个通用的对象,一个轻量化的对象。它最常见的用途是用在线程的同步化上面(见第15章)。你先当作不会用到这个对象。
问:所以Object的主要目的是提供多态的参数与返回类型吗?
答:这个Object类有两个主要的目的:作为多态让方法可以应付多种类型的机制,以及提供Java在执行期对任何对象都有需要的方法的实现程序代码(让所有的类都会继承到)。有一部分的方法是与线程有关,这会在后面的章节说明。
问:即然多态类型这么有用,为什么不把所有的参数和返回类型都设定成Object类型哪?
答: 啊… … 想想看这会发生什么后果。考虑一下何谓“ 类型安全检查” 。它是Java保护程序代码的一项重要机制。在此机制下,你不会意外地要求对象执行错误类型的动作。例如说防止你对Cefiro要求Ferrai的加速动作。
但事实上,你也不用担心会发生这件事,因为当某个对象是以Object类型来引用时,Java会把它当作Object类型的实例。这代表你只能调用由Object类中所声明的方法。若你像下面这样做:Object o = new Ferrai( );o.goFast( );//非法则第二行会无法通过编译。
因为Java是类型检查很强的程序语言,编译器会检查你调用的是否是该对象确实可以响应的方法。换句话说,你只能从确实有该方法的类去调用。同样,这也会在后面的章节说明。
| 回书目 上一节 下一节 |