对照public protected default private 访问范围
对比public protected default private 访问范围
A类:
package test3; public class A { public String public_str = "A_public_str"; protected String protected_str = "A_protected_str"; String default_str = "A_default_str"; private String private_str = "A_private_str"; public void access(){ System.out.println("同包下,本类中,调用本类(A类)属性,访问情况如下:"); System.out.println(public_str); System.out.println(protected_str); System.out.println(default_str); System.out.println(private_str); } }
B类:
package test3; public class B extends A{ public void access(){ System.out.println("同包,子孙类关系,继承A类,调用A类属性,访问情况如下:"); System.out.println(super.public_str); System.out.println(super.protected_str); System.out.println(super.default_str); System.out.println("private_str 无法访问"); } }
C类:
package test3; public class C { A a = new A(); public void access(){ System.out.println("同包下,非子孙类关系,C类中new一个A类对象,调用A类属性,访问情况如下:"); System.out.println(a.public_str); System.out.println(a.protected_str); System.out.println(a.default_str); System.out.println("private_str 无法访问"); } }
D类:
package test4; import test3.A; public class D extends A{ public void access(){ System.out.println("不同包,继承A类,调用A类属性,访问情况如下:"); System.out.println(super.public_str); System.out.println(super.protected_str); System.out.println("default_str 无法访问"); System.out.println("private_str 无法访问"); } }
E类:
package test4; import test3.A; public class E { A a= new A(); public void access(){ System.out.println("不同包,非子孙类关系,调用A类属性,访问情况如下:"); System.out.println(a.public_str); System.out.println("protected_str 无法访问"); System.out.println("default_str 无法访问"); System.out.println("private_str 无法访问"); } }
Main类:
package test5; import test3.A; import test3.C; import test3.B; import test4.D; import test4.E; public class Main { public static void main(String[] args) { A a = new A(); B b = new B(); C c = new C(); D d = new D(); E e = new E(); System.out.println("对比public protected default private 访问范围:"); System.out.println("A类访问情况:"); a.access(); System.out.println(" "); System.out.println("B类访问情况:"); b.access(); System.out.println(" "); System.out.println("C类访问情况:"); c.access(); System.out.println(" "); System.out.println("D类访问情况:"); d.access(); System.out.println(" "); System.out.println("E类访问情况:"); e.access(); System.out.println(" "); } }
结果
对比public protected default private 访问范围:
A类访问情况:
同包下,本类中,调用本类(A类)属性,访问情况如下:
A_public_str
A_protected_str
A_default_str
A_private_str
B类访问情况:
同包,子孙类关系,继承A类,调用A类属性,访问情况如下:
A_public_str
A_protected_str
A_default_str
private_str 无法访问
C类访问情况:
同包下,非子孙类关系,C类中new一个A类对象,调用A类属性,访问情况如下:
A_public_str
A_protected_str
A_default_str
private_str 无法访问
D类访问情况:
不同包,继承A类,调用A类属性,访问情况如下:
A_public_str
A_protected_str
default_str 无法访问
private_str 无法访问
E类访问情况:
不同包,非子孙类关系,调用A类属性,访问情况如下:
A_public_str
protected_str 无法访问
default_str 无法访问
private_str 无法访问
A类访问情况:
同包下,本类中,调用本类(A类)属性,访问情况如下:
A_public_str
A_protected_str
A_default_str
A_private_str
B类访问情况:
同包,子孙类关系,继承A类,调用A类属性,访问情况如下:
A_public_str
A_protected_str
A_default_str
private_str 无法访问
C类访问情况:
同包下,非子孙类关系,C类中new一个A类对象,调用A类属性,访问情况如下:
A_public_str
A_protected_str
A_default_str
private_str 无法访问
D类访问情况:
不同包,继承A类,调用A类属性,访问情况如下:
A_public_str
A_protected_str
default_str 无法访问
private_str 无法访问
E类访问情况:
不同包,非子孙类关系,调用A类属性,访问情况如下:
A_public_str
protected_str 无法访问
default_str 无法访问
private_str 无法访问