Java访问权限


Java中,有四种访问权限,分别为private,protected,public和默认。关于他们的区别,现解释如下:

1 private:

私有的,只能是类自身才能访问,如一个Java工程中,我们添加了一个包,包名为gibbon.java.test。在该包名下定义了一个类名为Test的类。具体代码所示。

package gibbon.java.test;

public Class Test{
      private int a;
      protected int b;
      public int c;
      int d;
     public static void main(String[] args){
          Test test = new Test();
          int tmp = test.a; //因为是在自身中调用的私有成员数据,所以这个语句是正确的
      }
}

但是,如果我们在gibbon.java.test目录下再添加一个类名为TestPrivate的类,然后调用Test的私有数据a.就会发现,是个错误的语句。

package gibbon.java.test;

public Class TestPrivate{
      public static void main(String[] args){
          Test test = new Test();
          int tmp = test.a; //因为是在另一个类中调用的私有成员数据,所以这个语句是错误的
      }
}

另外,我们在这里再添加一个gibbon.java.others的包,同样,和上面的TestPrivate类一样,gibbon.java.others下的类也不能调用Test的私有成员

2 protected:

成员是受保护的,只有如该类的派生类(即子类)或者同个包名下的类才能访问。如下例子,在gibbon.java.test下有个TestProtected的类,其程序如下:

package gibbon.java.test;

public Class TestProtected{
    public static void main(String[] args){
          Test test = new Test();
          int tmp = test.b //b是受保护成员数据,即使是非自身类调用,在同个包内的其他类也可以访问
    }
}

但是,若如1中所说的,在包gibbon.java.others下的某个类访问,则会出现非法访问,除非这个类是派生自所访问的类。如下例子:

但是这个TestChild仍然无法访问父类的私有成员a。见1

3  默认:

成员属性是默认的,其和private的区别是比private的权限大点,即默认的能被同个包名下的类所访问,而private不行。但默认的又比protected属性的权限小些,其同样和protected能在同包名下被访问,但若是非同包的类则不能直接访问,即使是派生类也不行,如上面的TestChild派生类,若加如下句子,则编译报错。

package gibbon.java.others;
import gibbon.java.test;

public Class TestChild extends Test{
      public static void main(String[] args){
          Test test = new Test();

          int tmp1 = test.d; //非相同包内的派生类访问父类的默认成员是不允许的

          int tmp = test.b;   
 }
}

4 Public:

公有的,所有的类都能访问。这个是最容易理解的。

Java访问权限修饰符用法笔记

Java Hashtable多线程操作遍历问题

Java多线程顺序执行

Java多线程问题之同步器CyclicBarrier

Java多线程之wait()和notify()

Java多线程之synchronized

Java多线程之并发锁

相关内容

    暂无相关文章