访问控制权限表
描述
权限大小:public > protected > default > privatepublic:如果一个类的属性或方法使用public访问控制符修饰,那么这个该属性或方法就可以被项目中的所有类访问protected:如果一个类的属性或方法使用protected访问控制符修饰,那么该属性或方法既可以被同一个包中的其他类访问,也可以被不同包中的子类访问
如果该属性或方法不是静态的,那么需要实例化子类来调用如果该属性或方法是静态的,那么既可以用父类类名来调用,也可以用子类类名来调用 default:如果一个类的属性或方法不使用任何访问控制修饰,则它为default访问控制权限。default访问控制权限的属性或方法可以被相同包下的其他类访问,不同包的类无论有没有继承该类,都不能访问该类的default访问控制权限的属性或方法private:如果一个类的属性或方法使用private访问控制符修饰,则这个属性或方法只能在当前类的内部被访问
实例
简单起见,以下实例只设置了属性来观察
同类中的访问:
package com
.pack
.test1
;
public class ADemo {
private String a
= "private";
String b
= "default";
protected String c
= "protected";
public String d
= "public";
public static void main(String
[] args
) {
ADemo ad
= new ADemo();
System
.out
.println(ad
.a
);
System
.out
.println(ad
.b
);
System
.out
.println(ad
.c
);
System
.out
.println(ad
.d
);
}
}
运行结果:private
default
protected
public
同包不同类的访问:
package com
.pack
.test1
;
public class BDmo {
public static void main(String
[] args
) {
ADemo ad
= new ADemo();
System
.out
.println(ad
.b
);
System
.out
.println(ad
.c
);
System
.out
.println(ad
.d
);
}
}
运行结果:default
protected
public
不同包非子类的访问:
package com
.pack
.test2
;
import com
.pack
.test1
.ADemo
;
public class CDem {
public static void main(String
[] args
) {
ADemo ad
= new ADemo();
System
.out
.println(ad
.d
);
}
}
运行结果:public
不同包子类的访问:
package com
.pack
.test2
;
import com
.pack
.test1
.ADemo
;
public class DDemo extends ADemo {
public static void main(String
[] args
) {
ADemo ad
= new ADemo();
System
.out
.println(new DDemo().c
);
System
.out
.println(ad
.d
);
}
}
运行结果:protected
public