如果对类及成员访问有特殊限制,可以引入修饰符对类及成员进行限定,以说明他们的性质、相互关系和使用范围。常见的修饰符有publicprotectedprivatefinalabstractststic等。这里重点介绍前三种。

1、Public

  public可以同时修饰类和成员变量、成员方法、如果public修饰一个类名,如public class A{……}则表示类可以被其他类问和引用。如果类成员(变量和方法)用public修饰,表示该类不仅可以被其它成员访问,而且可以被其它类直接访问,也就是说,外界可以直接存共有的数据和公有的方法。


例1.public使用示例

class A{
    public int x;
    public void setx(int i){
        x=i;
        System.out.println("x="+x);
    }
}
public class Test {
    public static void main(String[] args) {
        A a=new A();
        a.setx(3);
        a.x=10;
        System.out.println("x="+a.x);
    }
}

注:类A中多有的成员都定义为public类型,因此其中的变量x和方法setx()都可以被另一个类直接访问。

1、Protected

 关键字protected主要用于修饰类成员,说明该成员是被保护成员,除了可以被自身访问外,还可以被该类的子类及与该类同一个包中的其它类访问。


2.protected使用示例

class A{
    protected int x;
    protected void setx(int i){
        x=i;
        System.out.println("x="+x);
    }
}
public class Test extends A{
    public static void main(String[] args) {
      Test test=new Test();
      test.setx(4);
      test.x=10;
      System.out.println(test.x);
    }
}

注:该例演示的是在子类中访问父类中受保护的成员。Test A 的子类,关键字extendx表示他们之间的继承关系,由此可以看出,子类可以直接访问父类中被保护的数据和方法。


3.Private

 关键字private主要用于修饰类成员,表示该类成员只能被该类自身访问,任何其他类(包括他的子类)都无法修改和引用。应该就不希望他人随意应用和修改的数据和方法设为private,这将使得私有成员对其他类不可见,只有通过声明为public的方法才可以对这些数据进行访问,从而达到信息隐藏和封装的目的。


3.private使用示例

class Date{
    private int day;
    public void tomorrow(){
        day=day+1;
        System.out.println(day);
    }
    public void setDay(int i){
        day=i;
    }
    }
public class Test {
    public static void main(String[] args) {
     Date mydate =new Date();
     //mydate.day=21;//错误,不能访问
     mydate.setDay(21);//正确
     mydate.tomorrow();
    }
}


注:在Date中定义一个私有的成员变量day,在本类中对她的使用没有限制。但在另一个类中访问Date的私有成员变量时有限制的。因此mydate.day=21;是错误的。只能通过Date中的公有方法对day进行操作。


提示:如果成员前没有publicprotectedprivate中的任何一个,则称它使用了默认(default)修饰符。这时,只有该类本身及与该类同一个包中的其他类才可以直接访问这些默认成员。下面用一个表格进行总结(Y表示可以访问):



  同一个类   同一个包 不同包的子类不同包的非子类
  private      Y


  default      Y      Y

 protected      Y      Y      Y
  public      Y      Y      Y       Y