什么是访问修饰符?
在Java中,访问修饰符用于设置类,接口,变量,方法,构造函数,数据成员和setter方法的可访问性(可见性)。例如,
class Animal {
public void method1() {...}
private void method2() {...}
}
在上面的示例中,我们声明了2个方法:method1()和method2()。这里,
- method1是
public
-这意味着它可以被其他类访问。 - method2是
private
-这意味着它不能被其他类访问。
注意关键字public
和private
。这些是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类访问的。
一图概述了访问修饰符
访问修饰符主要用于封装。我可以帮助我们控制程序的哪一部分可以访问类的成员。这样就可以防止滥用数据。要了解有关封装的更多信息,请访问Java封装。