原文: https://www.programiz.com/java-programming/access-modifiers
在本教程中,我们将在示例的帮助下了解 Java 访问修饰符,其类型以及如何使用它们。
什么是访问修饰符?
在 Java 中,访问修饰符用于设置类,接口,变量,方法,构造器,数据成员和设置器方法的可见性(可见性)。 例如,
class Animal {public void method1() {...}private void method2() {...}}
在上面的示例中,我们声明了 2 个方法:method1()和method2()。 这里,
method1是public- 这意味着可以由其他类访问。method2为private- 这意味着其他类无法访问它。
注意关键字public和private。 这些是 Java 中的访问修饰符。 它们也称为可见性修改器。
注意:您无法设置获取器方法的访问修饰符。
访问修饰符的类型
在学习访问修饰符的类型之前,请确保您了解 Java 包。
Java 中有四个访问修饰符关键字,它们是:
| 修饰符 | 说明 |
|---|---|
| 默认 | 声明仅在包中可见(包私有) |
private |
声明仅在类中可见 |
protected |
声明在包或所有子类中均可见 |
public |
声明随处可见 |
默认访问修饰符
如果我们未为类,方法,变量等明确指定任何访问修饰符,则默认情况下将考虑默认访问修饰符。 例如,
package defaultPackage;class Logger {void message(){System.out.println("This is a message");}}
此处,Logger类具有默认的访问修饰符。 并且该类对属于defaultPackage包的所有类都是可见的。 但是,如果尝试在defaultPackage之外的另一个类中使用Logger类,则会出现编译错误。
私有访问修饰符
声明变量和方法private时,不能在类外部访问它们。 例如,
class Data {// private variableprivate String name;}public class Main {public static void main(String[] main){// create an object of DataData d = new Data();// access private variable and field from another classd.name = "Programiz";}}
在上面的示例中,我们声明了一个名为name的私有变量,和一个名为display()的私有方法。 运行程序时,将出现以下错误:
Main.java:18: error: name has private access in Datad.name = "Programiz";^
产生错误是因为我们试图从Main类访问Data类的私有变量和私有方法。
您可能想知道我们是否需要访问这些私有变量。 在这种情况下,我们可以使用获取器和设置器方法。 例如,
class Data {private String name;// getter methodpublic String getName() {return this.name;}// setter methodpublic 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 setterd.setName("Programiz");System.out.println(d.getName());}}
输出:
The name is Programiz
在上面的示例中,我们有一个名为name的私有变量。 为了从外部类访问变量,我们使用了方法:getName()和setName()。 这些方法在 Java 中称为获取器和设置器。
在这里,我们使用了设置器方法(setName())将值分配给变量,并使用获取器方法(getName())来访问变量。
我们在setName()中使用了this关键字来引用该类的变量。 要了解有关this关键字的更多信息,请访问 Java this关键字。
注意:我们无法在 Java 中声明私有的类和接口。 但是,可以将嵌套类声明为私有。 要了解更多信息,请访问 Java 嵌套和内部类。
受保护访问修饰符
当方法和数据成员被声明为protected时,我们可以在同一包中以及从子类中访问它们。 例如,
class Animal {// protected methodprotected void display() {System.out.println("I am an animal");}}class Dog extends Animal {public static void main(String[] args) {// create an object of Dog classDog dog = new Dog();// access protected methoddog.display();}}
输出:
I am an animal
在上面的示例中,我们在Animal类中有一个名为display()的受保护方法。Animal类由Dog类继承。 要了解有关继承的更多信息,请访问 Java 继承。
然后,我们创建了Dog类的对象Dog。 使用该对象,我们尝试访问父类的受保护方法。
由于可以从子类访问受保护的方法,因此我们可以从Dog类访问Animal类的方法。
注意:我们无法在 Java 中声明类或接口protected。
公共访问修饰符
当方法,变量,类等被声明为public时,我们可以从任何地方访问它们。 公共访问修饰符没有范围限制。 例如,
// Animal.java file// public classpublic class Animal {// public variablepublic int legCount;// public methodpublic void display() {System.out.println("I am an animal.");System.out.println("I have " + legCount + " legs.");}}// Main.javapublic class Main {public static void main( String[] args ) {// accessing the public classAnimal animal = new Animal();// accessing the public variableanimal.legCount = 4;// accessing the public methodanimal.display();}}
输出:
I am an animal.I have 4 legs.
这里,
- 可从
Main类访问公共类Animal。 - 可从
Main类访问公共变量legCount。 - 可从
Main类访问公共方法display()。
一图概述访问修饰符

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