Skip to content

Latest commit

 

History

History
230 lines (160 loc) · 6.66 KB

27.md

File metadata and controls

230 lines (160 loc) · 6.66 KB

Java 访问修饰符

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

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

什么是访问修饰符?

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

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

   private void method2() {...}
}

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

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

注意关键字publicprivate。 这些是 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 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的私有变量,和一个名为display()的私有方法。 运行程序时,将出现以下错误:

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

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

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

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 中称为获取器和设置器。

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

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

注意:我们无法在 Java 中声明私有的类和接口。 但是,可以将嵌套类声明为私有。 要了解更多信息,请访问 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.

这里,

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

一图概述访问修饰符

Accessibility of all Access Modifiers in Java

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

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