Java对比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 无法访问

 

你可能感兴趣的:(java访问修饰符)