搜索 K
Appearance
博客正在加载中...
Appearance
Java 语言提供了很多修饰符,主要分为以下两类:
修饰符用来修饰类、方法或者变量的访问权限或特性,通常放在语句的最前端。
举例:
public class className {
private boolean myFlag;
static final double weeks = 9.5;
protected static final int BOXWIDTH = 42;
public static void main(String[] arguments) {
// 方法体
}
}访问控制修饰符,也叫可见性修饰符。
可见性修饰符的作用:可以用于确定一个类以及它的成员(变量、方法和构造方法)的可见性,即类和成员能否在该类之外被访问。
注意,可见性修饰符是限制其他类访问本类的权限的,但如果是在类里面,成员是可以任意访问其他成员的。
Java 支持 4 种可见性修饰符:public、protected、default(无修饰符,也叫包访问)和 private
每个修饰符的简介:
在局部变量上使用修饰符 public 和 private 都会导致编译错误。
列个表格:
| 类中成员的修饰符 | 在同一类内可访问 | 在同一包内可访问 | 在子类内可访问 | 在不同包可访问 |
|---|---|---|---|---|
| public | √ | √ | √ | √ |
| protected | √ | √ | √ | -- |
| default | √ | √ | -- | -- |
| private | √ | -- | -- | -- |
因此,论可见性, 私有 < 默认(无修饰符) < protected < public。我们依次来讲解
被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。但是如果几个相互访问的 public 类分布在不用的包中,则需要导入相应 public 类所在的包。
另外还有一些注意点:
main()方法必须设置成公有的,否则,Java 解释器将不能运行该类。.java 文件中,一定得有一个 public 的类,并且类名和文件名相同。public 修饰的类,其所有的公有方法和变量都能被其子类继承。public可以用在类、变量、方法和构造方法上,但不能在局部变量上使用。被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问,也能够被不同包中的子类访问,但其他不相关的类不能访问。
protected 访问修饰符不能修饰类和接口,方法和成员变量能够声明为 protected,但是接口的成员变量和成员方法不能声明为 protected。
下面的父类使用了 protected 访问修饰符,子类重载了父类的 openSpeaker()方法。
class AudioPlayer {
protected boolean openSpeaker(Speaker sp) {
// 实现细节
}
}
class StreamingAudioPlayer extends AudioPlayer {
boolean openSpeaker(Speaker sp) {
// 实现细节
}
}不使用任何关键字,就是使用默认访问修饰符,变量和方法对同一个包内的类是可见的。
如下例所示,变量和方法的声明可以不使用任何修饰符。
String version = "1.5.1";
boolean processOrder() {
return true;
}注意:即使是在不使用修饰符的情况下,接口里的变量都隐式声明为 public static final,接口里的方法默认情况下访问权限为 public。
私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,注意类和接口不能声明为 private。
声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。
private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。
有时候,子类想要修改继承的方法的可访问性,但也不是随便都能修改的,有一个原则:子类不能削弱父类中定义的方法的可访问性。举例来说就是:
本文介绍了 Java 中的用于控制可访问性的修饰符,共 4 个,并依次介绍了它们的特点,最后介绍了继承和访问性的注意点。
可访问性修饰符是非常基础重要的概念,请读者务必牢记。