客户端程序员:即在其应用中使用数据类型的类消费者,他的目标是收集各种用来实现快速应用开发的类。
类创建者:即创建新数据类型的程序员,目标是构建类。
访问控制存在的原因:a、让客户端程序员无法触及他们不应该触及的部分 ; b、允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员
java的四个关键字:public、protected、default、private(他们决定了紧跟其后被定义的东西可以被谁使用)
适用范围
访问权限 类 包 子类 其他包
public ∨ ∨ ∨ ∨ (对任何人都是可用的)
protect ∨ ∨ ∨ × (继承的类可以访问以及和private一样的权限)
default ∨ ∨ × × (包访问权限,即在整个包内均可被访问)
private ∨ × × × (除类型创建者和类型的内部方法之外的任何人都不能访问的元素)
以下,用代码进行详解(建四个类 Person Student Teacher Parents 和一个测试类)
package com.zq.demo.test1; /** * 类内 * @author Administrator */ public class Person { public String uname = "王五"; public void introduceMyself(){ System.out.println(uname); } } package com.zq.demo.test1; //同一个包 public class Student { Person p = new Person(); public void test(){ System.out.println(p.uname); } } package com.zq.demo.test1; //子类 public class Teacher extends Person{ public int age; Person p = new Person(); public void test1(){ System.out.println(p.uname); } } package com.zq.demo.test2; //不同包 import com.zq.demo.test1.Person; public class Parents { public String uname = "haha"; Person p = new Person(); public void test2(){ System.out.println(p.uname); } }
测试类的结果 显示public在上述均能访问到
用同样的四个类 来测试protected
在将Person中的uanme改为protected后 类Parents便报错了 The field Person.uname is not visible (说明不能跨包)
其他三个无影响
说明除了跨包 其他均不影响访问
private
只有本类中可以访问 但是借助在Person类中有关uname的set、get方法便可以进行访问
default
测试结果说明 只能在本包中进行访问 在其他包 即使是继承关系 也无法进行访问