易网时代-编程资源站
Welcome
首页
/
软件开发
/
JAVA
初始化和类装载
2017-02-06
23
初始化和类装载2007-05-28 yycnet.yeah.net yyc译在许多传统语言里,程序都是作为启动过程的一部分一次性载入的。随后进行的是初始化,再是正式执行程序。在这些语言中,必须对初始化过程进行慎重的控制,保证static数据的初始化不会带来麻烦。比如在一个static数据获得初始化之前,就有另一个static数据希望它是一个有效值,那么在C++中就会造成问题。Java则没有这样的问题,因为它采用了不同的装载方法。由于Java中的一切东西都是...
java的继承初始化
2017-02-06
22
java的继承初始化2007-05-28 yycnet.yeah.net yyc译我们有必要对整个初始化过程有所认识,其中包括继承,对这个过程中发生的事情有一个整体性的概念。请观察下述代码://: Beetle.java// The full process of initialization.class Insect {int i = 9;int j;Insect() {prt("i = " + i + ", j = &qu...
合成和继承学习总结
2017-02-06
22
合成和继承学习总结2007-05-28 yycnet.yeah.net yyc译无论继承还是合成,我们都可以在现有类型的基础上创建一个新类型。但在典型情况下,我们通过合成来实现现有类型的“再生”或“重复使用”,将其作为新类型基础实施过程的一部分使用。但如果想实现接口的“再生”,就应使用继承。由于衍生或派生出来的类拥有基础类的接口,所以能够将其“上溯造型”为基础类...
java的多形性
2017-02-06
24
java的多形性2007-05-28 yycnet.yeah.net yyc译“对于面向对象的程序设计语言,多型性是第三种最基本的特征(前两种是数据抽象和继承。”“多形性”(Polymorphism)从另一个角度将接口从具体的实施细节中分离出来,亦即实现了“是什么”与“怎样做”两个模块的分离。利用多形性的概念,代码的组织以及可读性均能获得改善。此外,还能创建&l...
上溯造型的问题
2017-02-06
24
上溯造型的问题2007-05-28 yycnet.yeah.net yyc译在第6章,大家已知道可将一个对象作为它自己的类型使用,或者作为它的基础类型的一个对象使用。取得一个对象句柄,并将其作为基础类型句柄使用的行为就叫作“上溯造型”——因为继承树的画法是基础类位于最上方。但这样做也会遇到一个问题,如下例所示(若执行这个程序遇到麻烦,请参考第3章的3.1.2小节“赋值”): //: M...
为什么要上溯造型
2017-02-06
27
为什么要上溯造型2007-05-28 yycnet.yeah.net yyc译这个程序看起来也许显得有些奇怪。为什么所有人都应该有意忘记一个对象的类型呢?进行上溯造型时,就可能产生这方面的疑惑。而且如果让tune()简单地取得一个Wind句柄,将其作为自己的自变量使用,似乎会更加简单、直观得多。但要注意:假如那样做,就需为系统内Instrument的每种类型写一个全新的tune()。假设按照前面的推论,加入Stringed(弦乐)和Brass(铜管)这两种...
java方法调用的绑定
2017-02-06
25
java方法调用的绑定2007-05-28 yycnet.yeah.net yyc译将一个方法调用同一个方法主体连接到一起就称为“绑定”(Binding)。若在程序运行以前执行绑定(由编译器和链接程序,如果有的话),就叫作“早期绑定”。大家以前或许从未听说过这个术语,因为它在任何程序化语言里都是不可能的。C编译器只有一种方法调用,那就是“早期绑定”。上述程序最令人迷惑不解的地方全与早期...
在java中产生正确的行为
2017-02-06
25
在java中产生正确的行为2007-05-28 yycnet.yeah.net yyc译知道Java里绑定的所有方法都通过后期绑定具有多形性以后,就可以相应地编写自己的代码,令其与基础类沟通。此时,所有的衍生类都保证能用相同的代码正常地工作。或者换用另一种方法,我们可以“将一条消息发给一个对象,让对象自行判断要做什么事情。”在面向对象的程序设计中,有一个经典的“形状”例子。由于它很容易用可视化的形式表现出来,...
java的扩展性
2017-02-06
25
java的扩展性2007-05-28 yycnet.yeah.net yyc译现在,让我们仍然返回乐器(Instrument)示例。由于存在多形性,所以可根据自己的需要向系统里加入任意多的新类型,同时毋需更改true()方法。在一个设计良好的OOP程序中,我们的大多数或者所有方法都会遵从tune()的模型,而且只与基础类接口通信。我们说这样的程序具有“扩展性”,因为可以从通用的基础类继承新的数据类型,从而新添一些功能。如果是为了适应...
java覆盖与过载
2017-02-06
29
java覆盖与过载2007-05-28 yycnet.yeah.net yyc译现在让我们用不同的眼光来看看本章的头一个例子。在下面这个程序中,方法play()的接口会在被覆盖的过程中发生变化。这意味着我们实际并没有“覆盖”方法,而是使其“过载”。编译器允许我们对方法进行过载处理,使其不报告出错。但这种行为可能并不是我们所希望的。下面是这个例子://: WindError.java // Accidental...
java的抽象类和方法
2017-02-06
25
java的抽象类和方法2007-05-28 yycnet.yeah.net yyc译在我们所有乐器(Instrument)例子中,基础类Instrument内的方法都肯定是“伪”方法。若去调用这些方法,就会出现错误。那是由于Instrument的意图是为从它衍生出去的所有类都创建一个通用接口。之所以要建立这个通用接口,唯一的原因就是它能为不同的子类型作出不同的表示。它为我们建立了一种基本形式,使我们能定义在所有衍生类里“...
java接口例子
2017-02-06
26
java接口例子2007-05-28 yycnet.yeah.net yyc译“interface”(接口)关键字使抽象的概念更深入了一层。我们可将其想象为一个“纯”抽象类。它允许创建者规定一个类的基本形式:方法名、自变量列表以及返回类型,但不规定方法主体。接口也包含了基本数据类型的数据成员,但它们都默认为static和final。接口只提供一种形式,并不提供实施的细节。接口这样描述自己:“对于实...
Java的“多重继承”
2017-02-06
28
Java的“多重继承”2007-05-28 yycnet.yeah.net yyc译接口只是比抽象类“更纯”的一种形式。它的用途并不止那些。由于接口根本没有具体的实施细节——也就是说,没有与存储空间与“接口”关联在一起——所以没有任何办法可以防止多个接口合并到一起。这一点是至关重要的,因为我们经常都需要表达这样一个意思:“x从属于a,也从属于b,也从...
通过继承扩展接口
2017-02-06
24
通过继承扩展接口2007-05-28 yycnet.yeah.net yyc译利用继承技术,可方便地为一个接口添加新的方法声明,也可以将几个接口合并成一个新接口。在这两种情况下,最终得到的都是一个新接口,如下例所示://: HorrorShow.java// Extending an interface with inheritanceinterface Monster {void menace();}interface DangerousMonster ...
java常数分组
2017-02-06
24
java常数分组2007-05-28 yycnet.yeah.net yyc译由于置入一个接口的所有字段都自动具有static和final属性,所以接口是对常数值进行分组的一个好工具,它具有与C或C++的enum非常相似的效果。如下例所示://: Months.java// Using interfaces to create groups of constantspackage c07;public interface Months {intJANUAR...
初始化java接口中的字段
2017-02-06
25
初始化java接口中的字段2007-05-28 yycnet.yeah.net yyc译接口中定义的字段会自动具有static和final属性。它们不能是“空白final”,但可初始化成非常数表达式。例如://: RandVals.java// Initializing interface fields with // non-constant initializersimport java.util.*;public interf...
java中的内部类
2017-02-06
22
java中的内部类2007-05-28 yycnet.yeah.net yyc译在Java 1.1中,可将一个类定义置入另一个类定义中。这就叫作“内部类”。内部类对我们非常有用,因为利用它可对那些逻辑上相互联系的类进行分组,并可控制一个类在另一个类里的“可见性”。然而,我们必须认识到内部类与以前讲述的“合成”方法存在着根本的区别。通常,对内部类的需要并不是特别明显的,至少不会立即感觉到...
内部类和上溯造型
2017-02-06
28
内部类和上溯造型2007-05-28 yycnet.yeah.net yyc译迄今为止,内部类看起来仍然没什么特别的地方。毕竟,用它实现隐藏显得有些大题小做。Java已经有一个非常优秀的隐藏机制——只允许类成为“友好的”(只在一个包内可见),而不是把它创建成一个内部类。然而,当我们准备上溯造型到一个基础类(特别是到一个接口)的时候,内部类就开始发挥其关键作用(从用于实现的对象生成一个接口句柄具有与上溯造型至一...
java的匿名内部类
2017-02-06
26
java的匿名内部类2007-05-28 yycnet.yeah.net yyc译至此,我们已基本理解了内部类的典型用途。对那些涉及内部类的代码,通常表达的都是“单纯”的内部类,非常简单,且极易理解。然而,内部类的设计非常全面,不可避免地会遇到它们的其他大量用法——假若我们在一个方法甚至一个任意的作用域内创建内部类。有两方面的原因促使我们这样做:(1) 正如前面展示的那样,我们准备实现某种形式的接口,使自己能...
java内部类的例子:链接到外部类
2017-02-06
25
java内部类的例子:链接到外部类2007-05-28 yycnet.yeah.net yyc译迄今为止,我们见到的内部类好象仅仅是一种名字隐藏以及代码组织方案。尽管这些功能非常有用,但似乎并不特别引人注目。然而,我们还忽略了另一个重要的事实。创建自己的内部类时,那个类的对象同时拥有指向封装对象(这些对象封装或生成了内部类)的一个链接。所以它们能访问那个封装对象的成员——毋需取得任何资格。除此以外,内部类拥有对封装类所有元素的访问权...
<<
11
12
13
14
15
16
17
18
19
20
>>
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图