Java 访问修饰符

什么是访问修饰符?

在Java中,访问修饰符用于设置接口变量方法构造方法、数据成员和setter方法的访问性(可见性)。例如,

class Animal {
    public void method1() {...}

   private void method2() {...}
}

在上面的示例中,我们声明了两个方法:method1() 和 method2()。这里,

  • method1public - 这意味着它可以被其他类访问。
  • method2private - 这意味着它不能被其他类访问。

请注意关键字 publicprivate。它们是Java中的访问修饰符。它们也称为可见性修饰符。

注意:您不能为getter方法设置访问修饰符。


访问修饰符的类型

在学习访问修饰符的类型之前,请确保您了解Java 包

Java中有四个访问修饰符关键字,它们是

修饰符 描述
默认 声明仅在包内可见(包私有)
私有 声明仅在类内可见
保护 声明在包内或所有子类中可见
公共 声明在任何地方可见

默认访问修饰符

如果我们没有为类、方法、变量等显式指定任何访问修饰符,则默认情况下会考虑默认访问修饰符。例如,

package defaultPackage;
class Logger {
    void message(){
        System.out.println("This is a message");
    }
}

这里,Logger 类具有默认访问修饰符。该类对属于 defaultPackage 包的所有类可见。但是,如果我们尝试在 defaultPackage 外部的另一个类中使用 Logger 类,我们将收到编译错误。


私有访问修饰符

当变量和方法被声明为 private 时,它们无法在类外部访问。例如,

class Data {
    // private variable
    private String name;
}

public class Main {
    public static void main(String[] main){

        // create an object of Data
        Data d = new Data();

        // access private variable and field from another class
        d.name = "Programiz";
    }
}

在上面的示例中,我们声明了一个名为 name 的私有变量。当运行程序时,我们将收到以下错误

Main.java:18: error: name has private access in Data
        d.name = "Programiz";
         ^

错误是因为我们正尝试从 Main 类访问 Data 类的私有变量。

您可能想知道,如果我们必须访问那些私有变量,该怎么办。在这种情况下,我们可以使用getter和setter方法。例如,

class Data {
    private String name;

    // getter method
    public String getName() {
        return this.name;
    }
    // setter method
    public void setName(String name) {
        this.name= name;
    }
}
public class Main {
    public static void main(String[] main){
        Data d = new Data();

        // access the private variable using the getter and setter
        d.setName("Programiz");
        System.out.println(d.getName());
    }
}

输出:

The name is Programiz

在上面的示例中,我们有一个名为 name 的私有变量。为了从外部类访问该变量,我们使用了方法:getName()setName()。这些方法在Java中称为getter和setter。

在这里,我们在setName() 中使用setter方法(setName())为变量赋值,并使用getter方法(getName())访问变量。

我们在setName() 中使用了 this 关键字来引用类的变量。要了解有关此关键字的更多信息,请访问 Java this 关键字

注意:我们不能在Java中将类或接口声明为 private。但是,可以声明嵌套类为 private。要了解更多信息,请访问 Java 嵌套类和内部类


保护访问修饰符

当方法和数据成员被声明为 protected 时,我们可以在同一包内以及从子类访问它们。例如,

class Animal {
    // protected method
    protected void display() {
        System.out.println("I am an animal");
    }
}

class Dog extends Animal {
    public static void main(String[] args) {

        // create an object of Dog class
        Dog dog = new Dog();
         // access protected method
        dog.display();
    }
}

输出:

I am an animal

在上面的示例中,我们在 Animal 类中有一个名为 display() 的保护方法。Animal 类被 Dog 类继承。要了解更多关于继承的信息,请访问 Java 继承

然后我们创建了 Dog 类的对象 dog。使用该对象,我们尝试访问父类的保护方法。

由于保护方法可以从子类访问,因此我们可以从 Dog 类访问 Animal 类的该方法。

注意:我们不能在Java中将类或接口声明为 protected


公共访问修饰符

当方法、变量、类等被声明为 public 时,我们就可以从任何地方访问它们。公共访问修饰符没有范围限制。例如,

// Animal.java file
// public class
public class Animal {
    // public variable
    public int legCount;

    // public method
    public void display() {
        System.out.println("I am an animal.");
        System.out.println("I have " + legCount + " legs.");
    }
}

// Main.java
public class Main {
    public static void main( String[] args ) {
        // accessing the public class
        Animal animal = new Animal();

        // accessing the public variable
        animal.legCount = 4;
        // accessing the public method
        animal.display();
    }
}

输出:

I am an animal.
I have 4 legs.

这里,

  • 公共类 AnimalMain 类中访问。
  • 公共变量 legCountMain 类中访问。
  • 公共方法 display()Main 类中访问。

访问修饰符汇总图

Accessibility of all Access Modifiers in Java
Java 中所有访问修饰符的可访问性

访问修饰符主要用于封装。它可以帮助我们控制程序中哪些部分可以访问类的成员。从而可以防止数据被滥用。要了解有关封装的更多信息,请访问 Java 封装

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战