接口和包
什么是接口:我们可以把接口理解成一种特殊的类型,它完全是由常量和抽象方法组成。(注意和抽象类的区别);
格式:
interface <name>
{
[<return-type><method-name>(<parameter-list>); ]*
[<type> <final-var> = <value>; ]*
} // []* -- 0 or many times
说明:
方法: 只允许抽象方法,即只声明,而不实现。其访问限定符是 public?
变量: 访问限定符是 static, final (constants)?
需要说明的是:
1 接口类型中不能包含构造函数;
2 接口类型可以用来声明一个变量;
通过引入接口的定义,我们:
1 实现多重继承;
2 使无关的类具有某些相同的行为;
但是,接口毕竟只是一个抽象的类型。在我们定义了接口之后,必须还要实现它,接口才真正发挥了作用。使用接口的格式就是
class <classname> [implements <interface-list>]
这里还要做一些必要的说明:
1 实现接口的方法必须使public
2 接口中的变量在实现接口的类中,被视为常量。
3 一个类可以实现多个接口;对应的,一个接口可以被多个类实现;
4 如果一个类在声明的时候指明要显现某个接口,但在类中又没有给出接口方法的实例,那么,这个类是抽象类;
5 如果一个实现了多个接口,而这些接口中有相同的方法定义,那么,这个类对方法的实现是被这些接口共同使用的。
接口之间也可以存在继承的关系,如:
interface <name> extends <interface-name-list>
可以参照类的类的继承来理解。但与类不同的是,接口可以extends多个基类接口;
为了把这些概念弄的更明白,我们用表格来比较一下:
名称 |
抽象类 |
接口 |
继承 |
单一继承关系,只能和一个类存在单向派生关系 |
支持多重继承。一个类可以实现多个接口 |
成员 |
可以包含方法实现;静态方法,protected 成员变量 |
只能有public的方法声明和常量 |
关系 |
可以实现多个接口 |
可以别多个类所实现 |
实例 |
--- |
一个被声明为接口类型的变量可以指向任何实现它的类的对象实例 |
包:
概念:包(package)是一组相关的类和接口的集合,引入包的概念的目的在于:
1 分离和重用名称空间(想想namespace的概念?)
2 控制成员的访问(回忆一下public,protected , private)
语法:
package pkg1[.pkg2[.pkg3]];
如果在定义一个类或者接口的时候,没有指明package , 那么,它就被默认的归类到一个无名称的package中;
Java以文件/目录系统方式来保存package,所以它们有树形的结构;
如果定义时声明了package,那么定义类的源文件必须被保存在相应package的目录中,目录名称和package名称必须一致;
以 java.awt.image这个package为例,其源文件一定保存在java\awt\image 中。(把jsdk目录中的src.zip解压缩看看就明白了)
Package的使用:
import pkg1[.pkg2].(<classname>|*);
如:
import java.util.Date;
import java.io.*;
java.lang这个包是被默认包含的。
Jsdk中现有的packages:
n Applet(Applet,AppletContext,…)
n Awt(Butto, CheckBox, Window, Color,…)
n io (inputStream,OutputStream,Filter, File,…)
n lang (Exception,String,Thread,Object,Class,System…)
n Net (CurrentHandler,Socket,URL,…)
n util (BitSet,Enumeration,Vector,Stack,Dictionary,…)
相关文章:
读书笔记:《Java2 教程》(一)