java 访问级别修饰符主要包括:private protected 和 public,可以限定其他类对该类、属性和 方法的使用权限。
修饰符 | 类的内部 | 同一个包里 | 子类(不同包中) | 任何地方 |
private | Y | N | N | N |
default | Y | Y | N | N |
protected | Y | Y | Y | N |
public | Y | Y | Y | Y |
注意以上对类的修饰只有:public 和 default,内部类除外。
1、private
public class PrivateTest01 {
public static void main(String[] args) {
A a = new A();
//不能访问,private 声明的变量或方法,只能在同一个类中使用
//System.out.println(a.id);
}
}
class A {
private int id;
}
2、protected
在同一个包下,建立类 ProtectedTest01、A,并建立 B 继承 A
public class ProtectedTest01 {
public static void main(String[] args) {
A a = new A();
a.method1();
A b = new B();
b.method1();
B b1 = new B();
b1.method3();
}
}
class A {
//采用 protected 声明的变量或方法只有子类或同一个包下的类可以调用
protected int id = 100;
public void method1() {
System.out.println(id);
}
protected void method2() {
System.out.println("A.method2()");
}
}
class B extends A {
public void method1() {
//可以正确调用
//因为和 A 在同一个包下
System.out.println(id);
}
public void method3() {
//可以正确调用
method2();
}
}
在 test1 下建立类 C1,在 test2 下建立 ProtectedTest02 和 C2 类
package test2;
import test1.C1;
public class ProtectedTest02 {
public static void main(String[] args) {
new C2().method2();
}
}
class C2 extends C1 {
public void method2() {
//可以调用,主要原因 C2 是 C1 的子类
//所以可以访问 protected 声明的变量
System.out.println(id);
method1();
}
}
class C3 {
public void method3() {
//不能在其他类中访问 protected 声明的方法或变量
//new C1().method1();
}
}
3、default
如果 class 不采用 public 修饰,那么此时的 class,只能被该包下的类访问,其他包下无法访问。
import test3.D;
public class DefaultTest01 {
public static void main(String[] args) {
D d = new D();
d.method1();
//不能访问,只有在一个类中或在同一个包下可以访问
//在子类中也不能访问
d.method2();
}
}