Java 语言 中一共有 4 种访问权限,分别为 private、default(默认)、protected 和 public。
private 属于私有访问权限,可以用在属性的定义和方法的声明上面,一旦使用了 private 关键字,则只能够再本类中进行声明。
default 如果一个类里面的属性或者方法没有使用任何的访问权限声明,那么就是默认的访问权限。默认访问权限可以被本包中的类访问,但是其他的包里面的类是不可以访问的。
protected 属于受保护的访问权限。一个类中的成员如果使用了 protected 访问权限,则只能被本包及不同包的子类所访问。
public 属于公共的访问资源,如果一个类中的成员使用了 public 访问权限,就可以在所有的类中被访问,不管是不是在同一个包中。
范围 | private | default | protected | public |
---|---|---|---|---|
同一类 | 是 | 是 | 是 | 是 |
同一个包中的类 | 是 | 是 | 是 | |
不同包的子类 | 是 | 是 | ||
其他包中的类 | 是 |
我们先建立一个目录来模拟权限
我们定义 ImportClass
类
package com.haicoder.net.packagetest.impo;
public class ImportClass {
private String info;
protected String message;
public String str;
String mess;
public void printInfo() {
System.out.println("I am ImportClass");
}
}
定义一个子类
package com.haicoder.net.packagetest.other;
import com.haicoder.net.packagetest.impo.ImportClass;
public class ImportSubClass extends ImportClass {
public void printProtectedInfo() {
System.out.println("访问受保护的资源:" + super.message);
}
}
定义一个测试类
package com.haicoder.net.packagetest;
import com.haicoder.net.packagetest.impo.ImportClass;
import com.haicoder.net.packagetest.other.ImportSubClass;
public class PackageTest {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)");
ImportClass importClass = new ImportClass();
importClass.str = "aaa";
importClass.mess = "aaa";
ImportSubClass importSubClass = new ImportSubClass();
importSubClass.message = "aaaaa";
System.out.println("结束");
}
}
编译报错.png)mess 是默认类型的,在测试类里面不能被访问。message 是 protected 类型的,message 在子类 ImportSubClass 可以被访问,但是在测试类里面,不能被访问。编译就拨错了。
private 只能够被当前类访问。default 是默认的访问权限,被它修饰的属性或方法只能够在同一个类或者同一个包中的类访问。
protected 可以被本包及不同包的子类所访问。public 权限最大,所有的类都可以访问。