Java中的访问说明符

Java访问说明符

我们知道java中几乎没有访问说明符。我们将一一探讨访问说明符。我们将首先研究Java中的访问说明符是什么?然后我们将研究这些访问说明符的用途。

访问说明符

访问说明符是诸如“ public”“ protected”“ default”“ private”之类的关键字,在Java中具有特殊含义。

它定义了变量,方法和类的访问范围,此处访问范围是指可以访问变量或类或方法的区域或空间。

访问说明符的类型

在Java中,有四种类型的访问说明符,这些访问说明符的名称如下:

  1. 公共访问说明符

  2. 受保护的访问说明符

  3. 默认访问说明符

  4. 专用访问说明符

现在,借助示例,我们将在Java中逐个描述每个访问说明符。

1)公共访问说明符

  • “ public”是在Java中引入的关键字。

  • 像所有类和方法一样,“公共”的访问范围无处不在。

  • 如果我们为“ public”关键字加上任何类,变量或方法的前缀,那么任何类或方法都可以访问它。

示例

//ClassA保存在package1中

package package1;

public class ClassA {
    public void display() {
        System.out.println("We are in Java World");

    }
}

package package2;

//导入package1,因为我们使用的是package1的ClassA- 
import package1.ClassA;

//类ClassB保存在package2中   
class ClassB {
    public static void main(String args[]) {
        ClassA ca = new ClassA();
        ca.display();
    }
}

输出结果

We are in Java World

2)受保护的访问说明符

  • “ protected”是在Java中引入的关键字。

  • “受保护”的访问范围不是无处不在,并且可以在同一类或其子类或在同一程序包中定义的所有那些类中访问。

  • 如果我们为“ protected”关键字加上任何类,变量或方法,则可以由同一类或其子类或同一包中定义的所有类访问它。

示例

//ClassA保存在package1中  
package package1;
public class ClassA {
    protected void display() {
        System.out.println("We are in Java World");
    }
}

package package2;

//导入package1是因为 
//我们正在使用package1的ClassA- 
import package1.ClassA;
//类ClassB保存在package2中   
class ClassB extends ClassA {
    public static void main(String args[]) {
        ClassA ca = new ClassA();
        ca.display();
    }
}

输出结果

We are in Java World

3)默认访问说明符

  • “ default”是在Java中引入的关键字。

  • “默认”的访问范围并非无处不在。

  • 它不是必须在任何类,变量或方法的前面都加上“ default”关键字的前缀,因为默认情况下,类,变量或方法在java中是默认公共的,并且只能由在同一程序包中定义的所有那些类访问。

示例

//ClassA保存在package1中  
package package1;
class ClassA {
    void display() {
        System.out.println("We are in Java World");
    }
}

package package2;
//导入package1是因为 we are using 
//包1的ClassA- 
import package1.ClassA;

//ClassB保存在package2中   
class ClassB {
    public static void main(String args[]) {

        /*  Here we will get compiletime error because 
            ClassA is not public so we can't access 
            this class outside the package 
        */
        ClassA ca = new ClassA();
        ca.display();
    }
}

输出结果

ClassB.java:3: error: ClassA is not public in package1; 
cannot be accessed from outside package
import package1.ClassA;
               ^
ClassB .java:10: error: cannot find symbol
ClassA ca= new ClassA();
 ^
  symbol:   class ClassA
  location: class ClassB
ClassB.java:10: error: cannot find symbol
 ClassA ca= new ClassA();
           ^
  symbol:   class ClassA
  location: class ClassB
3 errors

4)私有访问说明符

  • “ private”是在Java中引入的关键字。

  • “私有”的访问范围并非无处不在。

  • 如果我们在“ private”关键字前面加上任何变量或方法,则只能在同一类中对其进行访问。

示例

//ClassA保存在package1中  
package package1;
class ClassA {
    private void display() {
        System.out.println("We are in Java World");
    }
}

package package2;
//导入package1是因为 we are using 
//包1的ClassA- 
import package1.ClassA;

//ClassB保存在package2中   
public class ClassB {
    public static void main(String args[]) {

        /*  Here we will get compiletime error because 
            ClassA method is private so we can't access 
            this method outside the class and other package too
        */
        ClassA ca = new ClassA();
        ca.display();
    }
}

输出结果

ClassB.java:3: error: ClassA is not public in package1; 
cannot be accessed from outside package
import package1.ClassA;
               ^
ClassB .java:10: error: cannot find symbol
ClassA ca= new ClassA();
 ^
  symbol:   class ClassA
  location: class ClassB
ClassB.java:10: error: cannot find symbol
 ClassA ca= new ClassA();
           ^
  symbol:   class ClassA
  location: class ClassB
3 errors