针对类内每个成员的每个定义,Java 访问指示符 poublic,protected 以及private都置于它们的最前面——无论它们是一个数据成员,还是一个方法。每个访问指示符都只控制着对那个特定定义的访问。

1.friendly

    如果根本不指定访问指示符,默认的访问没有关键字,但它通常称为“友好”(Friendly)访问。这意味着当前包内的其他所有类都能访问“友好的”成员,但对包外的所有类来说,这些成员却是“私有”(Private)的,外界不得访问。由于一个编译单元(一个文件)只能从属于单个包,所以单个编译单元内的所有类相互间都是自动“友好”的。因此,我们也说友好元素拥有“包访问”权限。

2.public

    使用public关键字时,它意味着紧随在public 后面的成员声明适用于所有人。

示例: 

    包c05.dessert中创建一个Cookie类

//: Cookie.java
// Creates a library
package c05.dessert;
  public class Cookie 
  {
    public Cookie() {
      System.out.println("Cookie constructor");
    }
    void foo() { System.out.println("foo"); }
  }

再创建一个Dinner类,导入上面的dessert包

//: Dinner.java
// Uses the library
import c05.dessert.*;
  public class Dinner 
  {
    public Dinner() {
      System.out.println("Dinner constructor");
    }
    public static void main(String[] args) {
      Cookie x = new Cookie();
      //! x.foo(); // Can't access
    }
  }

    可以创建一个Cookie对象,因为它的构建器是 public的,而且类也是 public的(公共类的概念稍后还会进行更详细的讲述)。然而,foo()成员不可在 Dinner.java 内访问,因为foo()只有在 dessert包内才是“友好”的。

默认包:如果多个文件位于同一个目录下面,并且没有明确的包名,java就认为他们是一个默                 认包,就可以互相访问了。

3.private

    private关键字意味着除非那个特定的类,而且从那个类的方法里,否则没有人能访问那个成员。

     同一个包内的其他成员不能访问 private成员,这使其显得似乎将类与我们自己都隔离起来。

     默认的“友好”包访问通常已经是一种适当的隐藏方法;请记住,对于包的用户来说,是不

     能访问一个“友好”成员的。这种效果往往能令人满意,因为默认访问是我们通常采用的方         法。对于希望变成public(公共)的成员,我们通常明确地指出,令其可由客户程序员自由调用。

     private 有非常重要的用途,特别是在涉及多线程处理的时候。

     此时还会产生另一个影响:由于默认构建器是唯一获得定义的,而且它的属性是 private,所以可      防止对这个类的继承。

4.protected

    protected 关键字为我们引入了一种名为“继承”的概念,它以现有的类为基础,并在其中加        入新的成员,同时不会对现有的类产生影响——我们将这种现有的类称为“基础类”或者“基        本类”(Base Class)。

    若新建一个包,并从另一个包内的某个类里继承,则唯一能够访问的成员就是原来那个包的public     成员。当然,如果在相同的包里进行继承,那么继承获得的包能够访问所有“友好”的成员。        有些时候,基础类的创建者喜欢提供一个特殊的成员,并允许访问衍生类。这正是protected         的工作。

*为获得对一个类或成员变量的访问权限,唯一的方法就是:

    (1) 使成员成为“public”(公共的)。这样所有人从任何地方都可以访问它。

    (2) 变成一个“友好”成员,方法是舍弃所有访问指示符,并将其类置于相同的包内。这样一            来,其他类就可以访问成员。

    (3) 正如以后引入“继承”概念后大家会知道的那样,一个继承的类既可以访问一个 protected         成员,也可以访问一个 public成员(但不可访问 private成员)。只有在两个类位于相同            的包内时,它才可以访问友好成员。但现在不必关心这方面的问题。

    (4) 提供“访问器/变化器”方法(亦称为“获取/设置”方法),以便读取和修改值。这是            OOP环境中最正规的一种方法,也是 Java Beans的基础。


  


转载于:https://blog.51cto.com/zhenzhuangde/1726622