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