JAVA学习笔记——访问权限控制

时间:2022-09-05 15:14:08

如果存在两个同名的类,可以用不同的包名去区分,用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种访问权限,访问权限从大到小:publicprotected包访问权限(没有关键字)private。这些权限描述了该成员应该如何被外界访问。

public

标注为public的成员变量和函数,在其他类中可以被访问。

protected

标注为protected的成员变量和函数,在其继承类中可被访问,但不能被其他包中的非继承类访问(由于protected权限高于包访问权限,所以protected可被同一个包中的类访问)。

包访问权限(没有关键字)

不标注权限的即为包访问权限,可供同个package中其他类访问。

private

标注为private的成员变量和函数,不能被其他类访问,只能被自己这个类访问。
如果一个继承类extend一个基类,那么继承类是不能访问基类中的private成员的。要想做到能访问,可以1.放入同一个包;2.基类成员设置成protected。

类的访问权限

类的访问权限只有public和包访问权限两种,且每个.java文件只能有一个public类,作为对外的接口,其他的类只能是包访问权限。