访问控制权限
1.1 访问控制权都有哪些?
4个
private 私有
protected 受保护的
public 公开
默认
1.2 以上的4个访问控制权限:控制的范围是什么?
private 表示私有的,只能在本类中访问。
public 表示公开的,在任何位置都可以访问。
protected表示只能在本类、同包、子类中访问。
“默认”表示只能在本类,以及同包下访问。
1.3 访问控制权限修饰符可以修饰什么?
属性(4个都可以用)
方法(4个都可以用)
类(public和默认能用,其他不行。)
接口(public和默认能用,其他不行。)
......
访问控制修饰符 本类 同包 子类 任意位置
----------------------------------------------------------
public 可以 可以 可以 可以
protected 可以 可以 可以 不行
默认 可以 可以 不行 不行
private 可以 不行 不行 不行
这个不要死记硬背,自己下去之后编写代码自己测试。
范围从大到小排序:public > protected > 默认 > private
测试类1:注意看包路径
package com.javaSe; import javax.print.attribute.UnmodifiableSetException; public class Test01 { public static void main(String[] args) { User user = new User(); // Error:(8, 32) java: id 在 com.javaSe.User 中是 private 访问控制 // private 修饰的元素只能在本类中使用 需要getter and setter方法 // System.out.println(user.id); System.out.println(user.age); System.out.println(user.weight); System.out.println(user.name); } }
测试类2:注意看包路径
package com.javaSe; public class User { // 给一些属性 // 私有的 private int id; // 受保护的 protected int age; // 公开的 public int weight; // 什么都没有 默认的 String name; //方法 public void m1(){} private void m2(){} protected void m3(){} void m4(){} // 静态方法也可以 public static void x(){} private static void y(){} protected static void z(){} static void k(){} } // 错误:此处不允许使用修饰符private /*private class MyClass1{ }*/ // 错误:此处不允许使用修饰符protected /*protected class MyClass1{ }*/
测试类3:注意看包路径
package com.javaSe2; import com.javaSe.*; import javax.print.attribute.UnmodifiableSetException; public class Test02 { public static void main(String[] args) { User user = new User(); // Error:(12, 32) java: age 在 com.javaSe.User 中是 protected 访问控制 //System.out.println(user.age); // Error:(14, 32) java: name在com.javaSe.User中不是公共的; 无法从外部程序包中对其进行访问 //System.out.println(user.name); } }
测试类4:注意看包路径
package com.javaSe3; import com.javaSe.User; public class Vip extends User { public void shopping(){ System.out.println(this.age); // Error:(7, 32) java: name在com.javaSe.User中不是公共的; 无法从外部程序包中对其进行访问 // System.out.println(this.name); } }