访问控制符(*)
访问控制符 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|
public | y | y | y | y |
protected | y | y | y | n |
默认(就是什么都不写) | y | y | n | n |
private | y | n | n | n |
注意点1:这个就是很笼统的一个表。得重新仔细划分
类的关系:同一个目录只是当前层,比如说C:a/b/c a/b/d 在c目录下的才是同包
同类:就是当前类自身。
同包子类:同一个目录下的子类
同包类:同一个目录下的同级类
同包子包子类:同一个目录下的目录的子类
同包子包类:同一个目录下的目录的类
不同包类:不在一个目录下的类
不同包子类:不在一个目录下的子类
访问控制符 | 同类 | 同包子类 | 同包类 | 同包子包子类 | 同包子包类 | 不同包类 | 不同包子类 |
---|---|---|---|---|---|---|---|
public | y | y | y | y | y | y | y |
protected | y | y | y | y(*) | n | n | y(*) |
默认 | y | y | y | n | n | n | n |
private | y | n | n | n | n | n | n |
简述:public在哪都可以,private只有当前类内。protect同类+同包(子包不行)+子类(只要有继承无论在哪)。默认同类+同包(子包不行)
而且这些修饰符可以修饰类,方法,属性。
注意点2: 你测试protected时的子类访问权限时需要注意下面的。
package socker.a1;
public class A1 {
protected void a1(){
System.out.println("a1");
}
}
--------------------------------------------------
package socker.a2;//不同包
import socker.a1.A1;
public class A2 extends A1{
public static void main(String[] args) {
A2 a2 = new A2();//在这里你得使用A2去使用继承自A1的方法。
//A1 a1 = new A1(); 这样是不行的,对与不同包的类来说protected是不可见的
a2.a1();
}
}
---------------------------------------------------
//同样的子包下的继承也是需要去使用当前类自己的对象继承来的方法
package socker.a1.a11;//子包
import socker.a1.A1;
public class A4 extends A1 {
public static void main(String[] args) {
A4 a4 = new A4();
a4.a1();
}
}
目录结构: