Java 中的访问控制

Java中的访问控制


核心点:

  •  Java 中包的相关概念
  • Java中访问控制符的使用
Java 中包的相关概念

1、简述Java中包的概念

Java中的包类似于操作系统中的文件夹,将具有类似功能的类或者相同的类放在相同的包里面,便于组织与管理. 
如:若一个类专门用于数据传输,将这个类放在IO包里面.

2、简述调用某个包中的类的三种方式

1>使用一个类的全名:即包名+类名 
注意:在包中,所有类的真正的名字将是包名+类名的组合,所以在运行的时候要将包层给写上,不能直接写类名. 
2>使用import语句导入一个包中的所有的类 
3>使用import语句导入一个包中的特定的类(常用)

3、简述类前面修饰符的注意事项

如果一个类不是内部类,则在类的前面只能加public或者什么也不加,不能加protectd或者default或者private这些访问控制符,试用一切类,包括启动类.

4、Java中访问控制符的具体用法

Java中的访问控制符按照访问权限由高到低的顺序依次是public、protected、默认(无访问控制符)、private.

 Java中访问控制符的使用

  1. 在一个类的内部,所有的成员彼此之间都可以进行相互访问,访问控制符是透明的,失效的,共有的可以调用私有的,私有的可以调用共有的.
  2. 在同一个包的内部,只有其私有成员不能够进行访问.
  3. 在不同包无任何关系的两个类之间,只有共有类的共有成员才可以被另外一个包中的类进行访问.
  4.  在不同包存在继承关系的两个类之间 , 但是在一个子类的外部,只有共有类的共有成员才可以被直接的访问.
  5. 在不同包存在继承关系的两个类之间,只有共有类的共有成员和共有类的保护型成员才可以被另外一个包中的子类进行访问.
package accesscontrol;

public class AccessControl01 {
	/*
	 * 控制访问:在一个类的内部,所有的成员彼此之间都可以进行相互访问,
	 * 访问控制符是透明的,失效的,共有的可以调用私有的,私有的可以调用共有的.
	 */
	private String ac01 = "AC private";
	protected String ac02 = "AC protected";
	public String ac03 ="AC public";
	String gender = "AC default"; 
	
	public void setAC01(String ac01) {
		this.ac01 = ac01;
	}
	protected void setAC02(String ac02) {
		this.ac02 = ac02;
	}
	public String getAC02() {
		return ac02;
	}
	public String getAC01() {
		return ac01;
	}
	public String getall() {
		String all = "ac01 :" + ac01 + "\n" +
					 "ac02 :" + ac02 + "\n" +
					 "ac03 :" + ac03 + "\n";
		return (all);
	}
}
  
package accesscontrol;

import accesscontroltwo.AccessControlTwo01;
import accesscontroltwo.Person;

public class AccessControl {

	public static void main(String[] args) {
		AccessControl01 acOne = new AccessControl01();
		/*
		 * 控制访问:在同一个包的内部,只有其私有成员不能够进行访问
		 */
		System.out.println(acOne.ac02);
		String ac01A = "AC ac01A = ac01 (privated)";
		String ac02A = "AC ac02A = ac02 (protected)";
		acOne.setAC02(ac02A);
		acOne.setAC01(ac01A);
		System.out.println(acOne.getAC01());
		System.out.println(acOne.ac02);
		System.out.println(acOne.ac03);
		System.out.println(acOne.getall());
		System.out.println(acOne.gender);
		/*
		 * 在不同包无任何关系的两个类之间,
		 * 只有共有类的共有成员才可以被另外一个包中的类进行访问.
		 */
		System.out.println("\n\n---------------------------------");
		AccessControlTwo01 acTwo = new AccessControlTwo01();
		System.out.println(acTwo.acTwo03);
		String acTwo01A = "acTwo01A = acTwo01 :ACTwo private";
		acTwo.setACTwo01(acTwo01A);
		System.out.println(acTwo.getACTwo01());
		System.out.println(acTwo.getACTwo02());
		System.out.println(acTwo.getall());
		/*
		 * 在不同包存在继承关系的两个类之间,
		 * 但是在一个子类的外部,只有共有类的共有成员才可以被直接的访问.
		 */
		Leader p = new Leader();
		p.name = "Zhao";
	}

}
package accesscontroltwo;

public class AccessControlTwo01 {
	private String acTwo01 = "ACTwo private";
	protected String acTwo02 = "ACTwo protected";
	public String acTwo03 ="ACTwo public";
	
	public void setACTwo01(String acTwo01) {
		this.acTwo01 = acTwo01;
	}
	protected void setACTwo02(String acTwo02) {
		this.acTwo02 = acTwo02;
	}
	public String getACTwo02() {
		return acTwo02;
	}
	public String getACTwo01() {
		return acTwo01;
	}
	public String getall() {
		String all = "acTwo01 :" + acTwo01 + "\n" +
					 "acTwo02 :" + acTwo02 + "\n" +
					 "acTwo03 :" + acTwo03 + "\n";
		return (all);
	}
}

package accesscontroltwo;

public class Person {
	private float high = 178f ;
	protected float wight = 55f;
	public String name = "Zhao" ; 
}

package accesscontrol;

import accesscontroltwo.Person;

/*
 * 在不同包存在继承关系的两个类之间,
 * 只有共有类的共有成员和共有类的保护型成员才可以被另外一个包中的子类进行访问
 */
public class Leader extends Person {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Leader le = new Leader();
		System.out.println(le.name);
		System.out.println(le.wight);
	}

}



猜你喜欢

转载自blog.csdn.net/long_zhiqi/article/details/81030066