📜  Java访问修饰符

📅  最后修改于: 2020-09-26 13:28:33             🧑  作者: Mango

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

什么是访问修饰符?

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

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

   private void method2() {...}
}

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

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

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

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


访问修饰符的类型

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

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

Modifier Description
Default declarations are visible only within the package (package private)
Private declarations are visible within the class only
Protected declarations are visible within the package or all subclasses
Public declarations are visible everywhere

默认访问修饰符

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

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类的私有方法。

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

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。

在这里,我们使用了setter方法( setName() )将值分配给变量,并使用了getter方法( getName() )来访问变量。

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

注意 :我们无法在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
  • 公共方法display()是从Main类访问的。

一图概述了访问修饰符
Accessibility of all Access Modifiers in Java
Java中所有访问修饰符的可访问性

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