java中访问修饰符有四个,private,default,protected,public.
四个访问修饰符的访问权限如下图:
访问修饰符 | 同一个类中 | 同一个包中 | 不同包的子类中 | 不同包的非子类中 |
---|---|---|---|---|
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
private访问的权限
package com.aaa.bbb;
public class task {
public static void main(String[] args) {
Test test = new Test();
test.go();
}
}
class Test {
private void go() {
System.out.println("不能跨类访问");
}
}
//java: go() 在 com.aaa.bbb.Test 中是 private 访问控制
所以private修饰的不能跨类访问。
default是java默认的访问权限,可以被包内其他类访问。
protected的访问权限
package com.aaa.bbb;
public class task {
public static void main(String[] args) {
}
protected void go() {
System.out.println("能跨类访问");
}
}
protected修饰的方法在包bbb类task中。
package com.aaa.ccc;
import com.aaa.bbb.task;
public class task1 {
public static void main(String[] args) {
task test4 = new task();
test4.go();
}
static class Test2 extends task {
public void go() {
System.out.println("protected修饰的能在不同包的子类中访问");
}
}
}
在另一个包中调用是可以的。但当去除继承关系,就是在不同包的非子类中时就不行。
package com.aaa.ccc;
import com.aaa.bbb.task;
public class task1 {
public static void main(String[] args) {
task test4 = new task();
test4.go();
}
static class Test2 {
public void go() {
System.out.println("protected修饰的能在不同包的子类中访问");
}
}
}
java: go() 在 com.aaa.bbb.task 中是 protected 访问控制