访问控制符是一组限定类、域或方法是否可以被程序其它部分访问和调用的修饰符。

  • Java用来修饰类的访问控制符只有public,表示类对外“开放”,类定义时也可以无访问修饰,则表示类只限于同一包中访问使用。
  • 修饰类的成员的访问修饰符有3种:public、protected、private,还有一种是无修饰符的默认情况
  • 外界能访问某个类的成员的条件是:首先要能访问类,其次还要能访问类的成员。

    1、公共访问控制符 public

  1. 作为类的修饰符,将类声明为公共类, 表明它可以被所有的其它类所访问和引用。
  2. 作为类的成员的访问修饰符,表明在其他类中可以无限制地访问该成员。
  3. 要真正做到类成员可以在任何地方访问,在进行类设计时必须同时满足两点:
    • 首先类被定义为public,其次
    • 类的成员被定义为public

      2、 缺省访问控制符

  • 没有给出访问控制符情形
  • 该类只能被同一个包中的类访问和引用

image.png

3、私有访问控制符 private

用private修饰的域或方法只能在该类自身中访问,其子类也不能访问。(系统设计的安全性)

  1. class Myclass {
  2. private int a; //私有变量
  3. void display() { System.out.println(a); }
  4. }
  5. public class test {
  6. public static void main(String arg[]) {
  7. Myclass my=new Myclass();
  8. my.a=5; java: a Myclass 中是 private 访问控制
  9. my.display();
  10. }
  11. }
  12. class Myclass {
  13. private int a; //私有变量
  14. void set(int k) { a=k; }
  15. void display() { System.out.println(a); }
  16. }
  17. public class test {
  18. public static void main(String arg[]) {
  19. Myclass my=new Myclass();
  20. my.set(5);
  21. my.display(); 输出:5
  22. }
  23. }

4、 保护访问控制符 protected

用protected修饰的成员可以在三种类中所引用:

  • 该类本身;
  • 与它在同一个包中的其它类;
  • 在其它包中的该类的子类。

image.png

  1. 文件1PackageData.java(该文件存放在sub子目录下)
  2. package sub;
  3. public class PackageData {
  4. protected static int number=1;
  5. }
  6. 文件2Mytest.java
  7. import sub.*;
  8. public class Mytest {
  9. public static void main( String args[] ) {
  10. System.out.println("result="+PackageData.number);//编译错误!
  11. }
  12. }
同一类中 同一包中 不同包的子类中 其他
private Yes
默认 Yes Yes
protected Yes Yes Yes
public Yes Yes Yes Yes