访问修饰符是决定类、构造函数、方法或变量等Java语言成员的可访问性的关键字。
在Java中有四种类型的访问修饰符关键字:
- 默认(不需要关键字)
privateprotectedpublic
除了默认修饰符,其他修饰符通常在类、方法或变量本身之前声明。
声明访问修饰符
下面的代码显示了如何将一个类声明为public 级访问:
public class Cat {}
而下面显示了如何声明一个protected 方法:
public class Cat {
protected void hello(){
System.out.println("Meow!");
}
}
变量也是如此:
protected String name = "Cat";
// or
private int age = 5;
最后,这里是如何将一个构造函数声明为protected :
public class Cat {
String name;
protected Cat(){
name = "Cat";
}
}
如果没有声明访问修饰符类型,你的类、方法和变量将具有默认的访问权限:
String name = "Cat";
int age = 5;
访问修饰符关键字决定了Java语言成员的可访问性。
下面是一个表格,显示了这些关键字之间的区别:
| 修改器 | 同类 | 相同的包 | 子类/实例 | 世界 |
|---|---|---|---|---|
| 默认/无修改器 | Y | Y | N | N |
| 私人 | Y | N | N | N |
| 受保护的 | Y | Y | Y | N |
| 公开 | Y | Y | Y | Y |
让我们看看关于这些关键字的一些解释,以便你能更好地理解它们,从默认访问级别开始。
Java默认访问修改器
默认级别的访问允许从相同的类和包中访问Java类和它的成员,但从不同的包中则无法访问。
例如,假设你有一个Cat.java 文件,位于animal 包中,如下所示:
package animal;
class Cat {
void hello() {
System.out.println("Mew!");
}
}
你可以从同一包的其他类中访问Cat ,而不需要导入,如下图所示:
package animal;
public class SiameseCat extends Cat {}
但是你将无法从package main 中访问Cat 类,即使你在import 该类之后,如下所示:
package main;
import animal.Cat;
// ^ Error animal.Cat is not public
public class Main {
public static void main(String[] args) {
Cat myCat = new Cat();
}
}
为了使Cat 类在animal 包之外可用,你需要像这样使public 类:
public class Cat {}
Java私有访问修改器
Java中的private 关键字用于使Java 类的变量和方法在该类本身之外无法访问。
private 修饰符并不常用于一个类,因为一个private 类将是无用的,因为没有什么可以访问它。
例如,下面这个name 变量和hello() 方法在Cat 类中被声明为私有:
public class Cat {
private String name = "Tom";
private void hello() {
System.out.println("Meow!");
}
}
这两个成员在一个新的对象实例中不会被访问,如下图所示:
public static void main(String[] args) {
Cat myCat = new Cat();
myCat.name = "The Cat";
// Error: name has private access
myCat.hello();
// Error: hello() has private access
}
要使一个类的变量和方法可以从其实例中访问,那么你需要使用protected 修改器。
Java保护的访问修饰符
Javaprotected 访问修饰符允许你从类本身或同一包的另一个类中访问类成员。
下面的例子显示了如何从同一包的Main 类中访问Cat 类的成员:
package com.company;
class Cat {
protected String name = "Tom";
protected void hello() {
System.out.println("Meow!");
}
}
public class Main {
public static void main(String[] args) {
Cat myCat = new Cat();
myCat.name = "Thomas";
myCat.hello();
}
}
一个类的protected 成员也可以被它的子类访问,即使是从不同的包中。
下面的代码显示了SiameseCat 对象实例如何从Cat 类中访问变量和方法:
import animal.Cat;
public class SiameseCat extends Cat {
public static void main(String[] args) {
SiameseCat myCat = new SiameseCat();
myCat.name = "Siam";
myCat.hello();
}
}
Java公共访问修改器
Javapublic 访问修改器消除了访问类、构造函数、方法和关键字的所有限制。它允许你从同一程序内的任何地方访问Java类和它的成员。
public 关键字通常保留给Java中的常量变量:
public static final score = 10;
你可能会看到public static final 修改器应用于许多Math 类成员。
现在你已经了解了Java中的访问修饰关键字,接下来是时候让你了解非访问修饰关键字了。