原文: https://www.programiz.com/java-programming/access-modifiers

在本教程中,我们将在示例的帮助下了解 Java 访问修饰符,其类型以及如何使用它们。

什么是访问修饰符?

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

  1. class Animal {
  2. public void method1() {...}
  3. private void method2() {...}
  4. }

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

  • method1public - 这意味着可以由其他类访问。
  • method2private - 这意味着其他类无法访问它。

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

注意:您无法设置获取器方法的访问修饰符。


访问修饰符的类型

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

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

修饰符 说明
默认 声明仅在包中可见(包私有)
private 声明仅在类中可见
protected 声明在包或所有子类中均可见
public 声明随处可见

默认访问修饰符

如果我们未为类,方法,变量等明确指定任何访问修饰符,则默认情况下将考虑默认访问修饰符。 例如,

  1. package defaultPackage;
  2. class Logger {
  3. void message(){
  4. System.out.println("This is a message");
  5. }
  6. }

此处,Logger类具有默认的访问修饰符。 并且该类对属于defaultPackage包的所有类都是可见的。 但是,如果尝试在defaultPackage之外的另一个类中使用Logger类,则会出现编译错误。


私有访问修饰符

声明变量和方法private时,不能在类外部访问它们。 例如,

  1. class Data {
  2. // private variable
  3. private String name;
  4. }
  5. public class Main {
  6. public static void main(String[] main){
  7. // create an object of Data
  8. Data d = new Data();
  9. // access private variable and field from another class
  10. d.name = "Programiz";
  11. }
  12. }

在上面的示例中,我们声明了一个名为name的私有变量,和一个名为display()的私有方法。 运行程序时,将出现以下错误:

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

产生错误是因为我们试图从Main类访问Data类的私有变量和私有方法。

您可能想知道我们是否需要访问这些私有变量。 在这种情况下,我们可以使用获取器和设置器方法。 例如,

  1. class Data {
  2. private String name;
  3. // getter method
  4. public String getName() {
  5. return this.name;
  6. }
  7. // setter method
  8. public void setName(String name) {
  9. this.name= name;
  10. }
  11. }
  12. public class Main {
  13. public static void main(String[] main){
  14. Data d = new Data();
  15. // access the private variable using the getter and setter
  16. d.setName("Programiz");
  17. System.out.println(d.getName());
  18. }
  19. }

输出

  1. The name is Programiz

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

在这里,我们使用了设置器方法(setName())将值分配给变量,并使用获取器方法(getName())来访问变量。

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

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


受保护访问修饰符

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

  1. class Animal {
  2. // protected method
  3. protected void display() {
  4. System.out.println("I am an animal");
  5. }
  6. }
  7. class Dog extends Animal {
  8. public static void main(String[] args) {
  9. // create an object of Dog class
  10. Dog dog = new Dog();
  11. // access protected method
  12. dog.display();
  13. }
  14. }

输出

  1. I am an animal

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

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

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

注意:我们无法在 Java 中声明类或接口protected


公共访问修饰符

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

  1. // Animal.java file
  2. // public class
  3. public class Animal {
  4. // public variable
  5. public int legCount;
  6. // public method
  7. public void display() {
  8. System.out.println("I am an animal.");
  9. System.out.println("I have " + legCount + " legs.");
  10. }
  11. }
  12. // Main.java
  13. public class Main {
  14. public static void main( String[] args ) {
  15. // accessing the public class
  16. Animal animal = new Animal();
  17. // accessing the public variable
  18. animal.legCount = 4;
  19. // accessing the public method
  20. animal.display();
  21. }
  22. }

输出

  1. I am an animal.
  2. I have 4 legs.

这里,

  • 可从Main类访问公共类Animal
  • 可从Main类访问公共变量legCount
  • 可从Main类访问公共方法display()

一图概述访问修饰符

Java 访问修饰符 - 图1

Java 中所有访问修饰符的可见性

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