1、不同包中的类名可相同。包既是一种命名机制,又是一种可见性控制机制。可以在包中定义 包外部的代码 不能访问的类,也可以定义 只有相同包中的其他成员可以访问、而程序中的其他部分不能访问 的类成员。

2、java使用文件系统目录存储包,.class文件必须存储在对应包名的目录下,且名称必须精确匹配。重命名时注意修改目录。可以创建层次化的包。package pkg1[.pkg2[.pkg3]],如package java.awt.image。

如何查找包?首先,默认使用当前工作目录为起始点,子目录下即可;其次,可通过设置CLASSPATH环境变量来指定目录或路径;最后,可以为java和javac使用-classpath选项,为类指定路径。注意,类路径不能包含包本身。在命令行执行.class文件时要加上包名,如java packageA.classA,不能直接java classA。

3、访问保护。

private

无访问修饰符

protected

public

同一类中可见

同包子类可见

同包非子类可见

不同包子类可见

不同包非子类可见

类成员访问

非嵌套类只有两种访问级别:默认级别和公有级别。默认级别时这个类只能被相同包中的其他类访问。

如果某个类是公有的,那么这个类是在文件中声明的唯一公有类,并且文件名与此类的名称相同。

4、导入包。

import pkg1[.pkg2].(classname|*); 星号表示导入整个包。编译器隐式地为所有程序导入java.lang包。

如果使用*号导入两个不同包,但这两个包有相同的类,编译器不会提示,视图使用这个类时,编译器会提示,产生编译时错误,并且必须显式的命名指定包中的类。

import是可选的,可以使用完全限定名,包含类的整个包层次。比如class A extendsjava.util.Date{ ... }。

5、接口。

关键字interface,可以从类的实现中完全抽象出类的接口。运行时动态识别。避免子类臃肿。指定类必须执行哪些工作,但现在还不能进行这些工作。

没有实例变量,且方法没有方法体。一旦定义接口,任意多的类都可以实现接口。一个类可以实现任意多的接口。

access interface name {

return-type method_name1(parameter-list);  //抽象方法

return-type method_name2(parameter-list);

return-type method_nameN(parameter-list);

type final-varname1 = value;  //可声明变量,被隐式标识为final和static,必须初始化,类不能修改。

type final-varname2 = value;

type final-varnameN = value;

}

如果没有提供访问修饰符(access),采用默认访问级别,并且只有声明接口的包中的其他成员才能访问接口;如果声明为public,所有都可以使用。不能声明为private和protected。

包含接口的每个类必须实现接口所定义的所有方法。

所有方法和变量都隐式声明为public。

可以使用接口将共享的常量导入到多个类中,具体方法是简单的声明包含变量的接口,并将这些变量初始化。当在类中包含这类接口时,所有这些变量再作用域内都会被作为常量。

接口可以通过关键字extends继承另一个接口。如果在类实现的接口继承自另一个接口,则在类中要实现接口继承链中的所有方法。

嵌套接口。可以讲接口声明为某个类或者另外一个接口的成员。可以被声明为public、private、protected。与顶级接口不同,顶级接口要么是public要么是默认访问级别。

6、实现接口。

class classname [extends superclass] [implements interface [, interface ... ]] { } //继承接口先后,多个接口

如果实现的两个接口中声明了同一个方法,那么这两个接口的客户都可以使用该方法。

实现接口的方法必须声明为public,且方法的类型签名(形参)必须精确匹配。

可定义自己的其他成员。

通过接口引用访问实现。可将变量声明为使用接口而不是类的对象引用。运行时动态查询执行方法,会造成严重的负担,所以不要随意使用接口。如,public static main(String args[]) { Interface i = new Implement(); i.func(...);}此时i不能访问Implement类中的其他任何成员(注意)。接口引用变量只知道由接口声明的方法。

类没有实现接口定义的全部方法时,必须将类声明为abstract。

于2013/04/10