Java 版 (精华区)
发信人: wazy (坟), 信区: Java
标 题: java 语言规范(3)
发信站: 紫丁香 (Tue Sep 16 16:13:56 1997)
5. 界面
界面(interface)定义了一组方法,而没有实现其体。界面只提供方法
协议的封装,而不限制实现必须在什么继承树上。当一个类实现界面时,
一般必须实现界面描述的所有方法的体。(如果实现界面的类是抽象类,
它可以把实现界面方法的任务交给它的子类。)
界面解决了因多继承运行时过大开销这类问题。 但由于界面采用动
态方法束定,使用它们的时候在性能上会受到一点影响。
界面允许几个类同时享有一个程序设计界面,而彼此不完全知道对
方具体的实现。下面的例子是一个界面的声明(即用了interface 关键字),
并由一个类实现。
public interface Storing {
void freezeDry (Stream s);
void reconstitute (Stream s);
}
public class Image implement Storing,Painting {
…
void freezeDry (Stream s) {
//排序前按JPEG 压缩图象
}
void reconstitute (Stream s ) {
// 读入前按JPEG 解压缩图象
…
}
}
象类一样,界面也分私有(缺省)和公有。作用域与类相同。界面
内的方法通常是public,变量是public,static 和final的。
5.1界面作为类型
按声明的语法,界面名(interfaceName)和变量名( variableName)
声明的是实现该界面名的某个类的实例变量或参数。当界面作为类型时,
其行为和类作为类型完全一样。它使程序员可指定实现给定界面的对象,
而不必知道该对象的具体类型或继承关系。使用界面可以不必关心共享
公共抽象超类的其它类,或如何在Object中增加方法。
下面是说明界面名、方法名语法的例子。
class StorageManager {
Stream stream;
…
// Storing 是界面名
void pickle (Storing obj) {
obj. freezeDry (stream);
}
}
5.2 界面中的方法
界面中的方法定义如下:
returnType methodName (parameterList);
此声明没有修饰符(modifier)。界面中所有的方法都是公有的(public)
和抽象的(abstract)故无其他修饰符,参见“抽象方法”一节。
5.3 界面中的变量
界面中的变量是final,public或static的,无修饰符,变量必须初
始化。
5.4 组合界面
利用extends关键字。可以把多个界面组合为一个界面,如:
interface DoesItAll extends String,Painting {
void doessomethingElse ( );
}
6. 包
包(Package)由一组类(class)和界面(interface)组成。它是管理大型名
字空间,避免冲突的工具。每一个类和界面的名字都包含在某个包中。
按照一般的习惯,它的名字是由“.”号分隔的单词构成,第一个单词通
常是开发这个包的组织的名称。
6.1 定义一个编译单元的包
编译单元的包由package语句定义。如果使用package语句,编译单
元的第一行必须无空格,也无注释。其格式如下:
package packageName;
若编译单元无package语句,则该单元被置于一个缺省的无名的包
中。
6.2 使用其它包中的类和界面
在Java语言提供一个包可以使用另一个包中类和界面的定义和实现
的机制。用import关键词来标明来自其它包中的类。一个编译单元可以
自动把指定的类和界面输入到它自己的包中。
在一个包中的代码可以有两种方式来定义来自其它包中的类和界
面:
* 在每个引用的类和界面前面给出它们所在的包的名字;
//前缀包名法
acme. project. FooBar obj=new acme. project. FooBar( );
* 使用import语句,引入一个类或一个界面,或包含它们的包。引
入的类和界面的名字在当前的名字空间可用。引入一个包时,则该包所
有的公有类和界面均可用。其形式如下:
// 从 acme.project 引入所有类
import acme.project.*;
这个语句表示acme.project中所有的公有类被引入当前包。
以下语句从acme. project包中进入一个类Employec_List。
//从 acme. project而引入 Employee_List
import acme.project.Employee_list;
Employee_List obj = new Employee_List( );
在使用一个外部类或界面时,必须要声明该类或界面所在的包,否
则会产生编译错误。
--
※ 来源:.紫丁香 pclinux.hit.edu.cn.[FROM: zzz.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.936毫秒