-
Java的“多重继承”[图] 日期:2009-12-23 15:42:36 点击:11 好评:0
接口只是比抽象类“更纯”的一种形式。它的用途并不止那些。由于接口根本没有具体的实施细节――也就是说,没有与存储空间与“接口”关联在一起――所以没有任何办法可以防止...
-
抽象类和方法[图] 日期:2009-12-23 15:42:36 点击:7 好评:0
在我们所有乐器(Instrument)例子中,基础类Instrument内的方法都肯定是“伪”方法。若去调用这些方法,就会出现错误。那是由于Instrument的意图是为从它衍生出去的所有类都创建一个通...
-
内部类和上溯造型 日期:2009-12-23 15:42:36 点击:7 好评:0
迄今为止,内部类看起来仍然没什么非凡的地方。究竟,用它实现隐藏显得有些大题小做。Java已经有一个非常优秀的隐藏机制――只答应类成为“友好的”(只在一个包内可见),而不...
-
初始化接口中的字段 日期:2009-12-23 15:42:36 点击:7 好评:0
接口中定义的字段会自动具有static和final属性。它们不能是“空白final”,但可初始化成非常数表达式。例如: //: RandVals.Java // Initializing interface fields with // non-constant initializers import ja...
-
“类”常数分组 日期:2009-12-23 15:42:36 点击:4 好评:0
由于置入一个接口的所有字段都自动具有static和final属性,所以接口是对常数值进行分组的一个好工具,它具有与C或C++的enum非常相似的效果。如下例所示: //: Months.Java // Using interface...
-
通过继承扩展接口 日期:2009-12-23 15:42:36 点击:11 好评:0
利用继续技术,可方便地为一个接口添加新的方法声明,也可以将几个接口合并成一个新接口。在这两种情况下,最终得到的都是一个新接口,如下例所示: //: HorrorShow.Java // Extending...
-
static内部类 日期:2009-12-23 15:42:36 点击:5 好评:0
为正确理解static在应用于内部类时的含义,必须记住内部类的对象默认持有创建它的那个封装类的一个对象的句柄。然而,假如我们说一个内部类是static的,这种说法却是不成立的。...
-
链接到外部类 日期:2009-12-23 15:42:36 点击:4 好评:0
迄今为止,我们见到的内部类好象仅仅是一种名字隐藏以及代码组织方案。尽管这些功能非常有用,但似乎并不非凡引人注目。然而,我们还忽略了另一个重要的事实。创建自己的内部...
-
方法和作用域中的内部类 日期:2009-12-23 15:42:36 点击:10 好评:0
至此,我们已基本理解了内部类的典型用途。对那些涉及内部类的代码,通常表达的都是“单纯”的内部类,非常简单,且极易理解。然而,内部类的设计非常全面,不可避免地会碰到...
-
引用外部类对象 日期:2009-12-23 15:42:36 点击:2 好评:0
若想生成外部类对象的句柄,就要用一个点号以及一个this来命名外部类。举个例子来说,在Sequence.SSelector类中,它的所有方法都能产生外部类Sequence的存储句柄,方法是采用Sequence.thi...
-
内部类可以覆盖吗? 日期:2009-12-23 15:42:36 点击:4 好评:0
若创建一个内部类,然后从封装类继续,并重新定义内部类,那么会出现什么情况呢?也就是说,我们有可能覆盖一个内部类吗?这看起来似乎是一个非常有用的概念,但“覆盖”一个...
-
从内部类继承 日期:2009-12-23 15:42:36 点击:4 好评:0
由于内部类构建器必须同封装类对象的一个句柄联系到一起,所以从一个内部类继续的时候,情况会稍微变得有些复杂。这儿的问题是封装类的“秘密”句柄必须获得初始化,而且在衍...
-
构建器的调用顺序 日期:2009-12-23 15:42:36 点击:4 好评:0
构建器调用的顺序已在第4章进行了简要说明,但那是在继续和多形性问题引入之前说的话。 用于基础类的构建器肯定在一个衍生类的构建器中调用,而且逐渐向上链接,使每个基础类...
-
内部类标识符 日期:2009-12-23 15:42:36 点击:6 好评:0
由于每个类都会生成一个.class文件,用于容纳与如何创建这个类型的对象有关的所有信息(这种信息产生了一个名为Class对象的元类),所以大家或许会猜到内部类也必须生成相应的....
-
继承和finalize() 日期:2009-12-23 15:42:36 点击:6 好评:0
通过“合成”方法创建新类时,永远不必担心对那个类的成员对象的收尾工作。每个成员都是一个独立的对象,所以会得到正常的垃圾收集以及收尾处理――无论它是不是不自己某个类...
-
类和对象的兼容性[图] 日期:2009-12-23 15:42:36 点击:2 好评:0
二进制兼容的概念在某些方面与对象串行化的概念相似,两者的目标也有一定的重叠。串行化一个Java对象时,类的名称、域的名称被写入到一个二进制输出流,串行化到磁盘的对象可以...
-
数组和第一类对象 日期:2009-12-23 15:42:36 点击:6 好评:0
无论使用的数组属于什么类型,数组标识符实际都是指向真实对象的一个句柄。那些对象本身是在内存“堆”里创建的。堆对象既可“隐式”创建(即默认产生),亦可“显式”创建(...
-
纯继承与扩展[组图] 日期:2009-12-23 15:42:36 点击:5 好评:0
学习继续时,为了创建继续分级结构,看来最明显的方法是采取一种“纯粹”的手段。也就是说,只有在基础类或“接口”中已建立的方法才可在衍生类中被覆盖,如下面这张图所示:...
-
Linux + Java = Lava(岩浆)? 日期:2009-12-23 15:42:36 点击:5 好评:0
作者:蔡学镛 信息产业,战况频仍。Linux v.s Windows、Java v.s .NET、OpenOffice.org v.s Microsoft Office System、PS2 v.s XBox、Palm v.s Windows CE、Symbian v.s Microsoft Smart Phone…等等。孤军奋战总是势单力薄...
-
重载与覆盖 日期:2009-12-23 15:42:36 点击:12 好评:0
通过前面的例子应当把握的最重要的一点是:方法匹配的依据是方法的名字和签名的文本描述。下面我们为Sommelier类加入一些有关酒杯的方法: Glass fetchGlass(Wine wine) { ... } Glass fetchGla...