包
如果存在两个同名的类,可以用不同的包名去区分,用package
打包类。包名需要与目录结构相同,假如包名为com.pxz,那么该.java文件就应该位于com/pxz目录下。
// com/pxz/Myclass.java
package com.pxz;
public class Myclass{
//...
}
当我们需要使用该类时,就要使用import
导入这个类。包名暗示了该类的路径,再加上环境变量CLASSPATH的路径,共同构成了该类的绝对路径。假如CLASSPATH中存在路径home/java/
,导入的包名为com.pxz.Myclass
,那么编译器就会在目录home/java/com/pxz/
中寻找类Myclass。
// com/Test.java 该文件随便放在哪里都可以执行,因为它是依靠CLASSPATH和包名去寻找类的
import com.pxz.Myclass;
public class Test{
public static void main(String[] args){
Myclass temp = new Myclass();
}
}
默认包
以下是处于同一个目录下的2个不同类,这两个类可以互相访问。如果没有显式地使用package
说明打包到哪个包中,那么java会把同一个目录下的类打包到一个默认包中,又由于这些成员是包访问权限,所以它们就可以互相访问。
// com/pxz/Myclass1.java
class Myclass1{
void f(){}
}
// com/pxz/Myclass2.java
class Myclass2{
Myclass1 temp = new Myclass1();
temp.f();
}
访问权限
java中一共有4种访问权限,访问权限从大到小:public
、protected
、包访问权限(没有关键字)
、private
。这些权限描述了该成员应该如何被外界访问。
public
标注为public的成员变量和函数,在其他类中可以被访问。
protected
标注为protected的成员变量和函数,在其继承类中可被访问,但不能被其他包中的非继承类访问(由于protected权限高于包访问权限,所以protected可被同一个包中的类访问)。
包访问权限(没有关键字)
不标注权限的即为包访问权限,可供同个package中其他类访问。
private
标注为private的成员变量和函数,不能被其他类访问,只能被自己这个类访问。
如果一个继承类extend一个基类,那么继承类是不能访问基类中的private成员的。要想做到能访问,可以1.放入同一个包;2.基类成员设置成protected。
类的访问权限
类的访问权限只有public和包访问权限两种,且每个.java文件只能有一个public类,作为对外的接口,其他的类只能是包访问权限。