📜  Java中的访问修饰符

📅  最后修改于: 2020-03-27 03:47:21             🧑  作者: Mango

顾名思义,Java中的访问修饰符有助于限制类,构造函数,变量,方法或数据成员的范围。Java中有四种可用的访问修饰符:

  1. Default-不需要关键字
  2. Private
  3. Protected
  4. Public

 

  1. Default:如果未为类,方法或数据成员指定访问修饰符,则默认为默认访问修饰符。
    • 未使用任何访问修饰符声明的数据成员,类或方法(即具有默认访问修饰符)只能在同一包中访问。

    在此示例中,我们将创建两个包,并且这些包中的类将具有默认的访问修饰符,并且我们将尝试从第二个包的类中的一个包访问一个类。

    //Java代码展示默认修饰符
    package p1;
    //Class 芒果,拥有默认修饰符
    class mango
    {
        void display()
           {
               System.out.println("Hello World!");
           }
    }

     

    //Java代码,展示从别的类调用而报错的默认修饰符
    package p2;
    import p1.*;
    //这个类有默认修饰符
    class mangoNew
    {
        public static void main(String args[])
           {
              // 从p1,访问class mango
              mango obj = new mango();
              obj.display();
           }
    }

    输出:

    Compile time error

     

  2. 私有private:使用关键字private指定私有访问修饰符。
    • 声明为私有的方法或数据成员只能声明它们的类中访问。
    • 同一软件包的任何其他类将无法访问这些成员。
    • 顶级类或接口不能声明为私有,因为
        1. private表示“仅在封闭类中可见”。
        2. protected表示“仅在封闭的类和任何子类中可见”

      因此,这些修饰符在应用于类方面仅适用于嵌套类,不适用于顶级类

    在此示例中,我们将在同一包p1中创建两个类A和B。我们将在类A中将一个方法声明为私有,然后尝试从类B中访问此方法并查看结果。

    //Java展示private的使用
    package p1;
    class A
    {
       private void display()
        {
            System.out.println("芒果文档");
        }
    }
    class B
    {
       public static void main(String args[])
          {
              A obj = new A();
              // 尝试访问别的类的方法
              obj.display();
          }
    }

    输出:

    error: display() has private access in A
            obj.display();

     

  3. protected:使用关键字protected指定受保护的访问修饰符。
    • 声明为受保护的方法或数据成员可在同一包或不同包中的子类中访问。

    在此示例中,我们将创建两个包p1和p2。将p1中的Class A公开,以便在p2中访问它。类A中的方法受到保护,并且类B从类A继承,然后通过创建类B的对象来访问此受保护的方法。

    //Java代码,展示protected关键字
    package p1;
    // 类A
    public class A
    {
       protected void display()
        {
            System.out.println("芒果文档");
        }
    }
    //Java代码,展示protected关键字
    package p2;
    import p1.*; //从p1导入所有类
    // B继承A
    class B extends A
    {
       public static void main(String args[])
       {
           B obj = new B();
           obj.display();
       }
    }

    输出:

    芒果文档

    public:使用关键字public指定公共访问修饰符。

    • 在所有其他访问修饰符中,公共访问修饰符具有最广泛的范围
    • 声明为公共的类、方法或数据成员可从程序中的每个位置访问。对公共数据成员的范围没有限制。
      //Java程序,展示公共访问修饰符public用法
      package p1;
      public class A
      {
         public void display()
            {
                System.out.println("芒果文档");
            }
      }
      package p2;
      import p1.*;
      class B
      {
          public static void main(String args[])
            {
                A obj = new A;
                obj.display();
            }
      }

      输出:

      芒果文档

重要事项:

    • 如果其他程序员使用您的类,请尝试使用对特定成员有意义的最严格的访问级别。除非有充分的理由,否则请使用private。
    • 避免使用除常量之外的公共字段。