第 11 课:访问修饰符
既然您已经了解了软件包,我们可以讨论 JavaFX Script 编程语言提供的各种访问修饰符了。通过这些特殊的关键字可以为变量、函数和类设置各种可见性级别。 |
- | 默认访问 |
- | package 访问修饰符 |
- | protected 访问修饰符 |
- | public 访问修饰符 |
- | public-read 访问修饰符 |
- | public-init 访问修饰符 |
默认访问称为“仅脚本”,是指在未提供访问修饰符的情况下获得的访问。我们在本教程中大多数都在使用这种访问。
下面是一些示例:
var x; |
使用此访问级别,只能从脚本内部初始化、覆盖、读取、指定或绑定变量。其他任何源文件都不能读取或访问这些信息。
要使变量、函数或类可供同一个软件包中的其他代码访问,请使用 package
访问修饰符:
package var x; |
一定不要将该访问修饰符与前一课中介绍的软件包声明相混淆!
示例:
// Inside file tutorial/one.fx |
可以使用以下命令(从 tutorial
父目录中)编译并运行此示例:
javafxc tutorial/one.fx tutorial/two.fx |
输出为:
Hello from one.fx! |
protected
访问修饰符使变量或函数可供同一个软件包中的其他代码以及任何软件包中的子类访问。
示例:
// Inside file tutorial/one.fx |
编译并运行以下演示代码:
javafxc tutorial/one.fx two.fx |
输出为:
Class two says Hello! |
注意:不能对类应用此访问修饰符,这就是我们为什么将类 one
标记为 public
的原因。
public
类、变量或函数的可见性最高。可以从任何软件包中的任何类或脚本对其进行访问。
示例:
// Inside file tutorial/one.fx |
编译并运行以下示例:
javafxc tutorial/one.fx two.fx |
输出:
This is a public script variable, in one.fx |
public-read
访问修饰符定义可公开读取但(在默认情况下)只能从当前脚本内部写入的变量。为了扩大该变量的写入访问级别,可以在该修饰符前面添加 package
或 protected
修饰符(即 package public-read
或 protected public-read
)。这会将该变量的写入访问级别设置为 package
或 protected
。
示例:
// Inside file tutorial/one.fx |
编译并运行以下示例:
javafxc tutorial/one.fx tutorial/two.fx |
输出为 "1",这证明了可以从 tutorial/one.fx
脚本外部读取 x
。
现在,让我们尝试修改其值:
// Inside tutorial/two.fx |
结果为编译时错误:
tutorial/two.fx:3: x has script only (default) write access in tutorial.one |
为了能够修改该变量的值,我们必须扩大 x
的写入访问级别:
// Inside file tutorial/one.fx |
此示例现在将进行编译并将 "2" 输出到屏幕上。
public-init
访问修饰符定义可以由任何软件包中的对象字面值公开初始化的变量。但是,后续的写入访问将按照与 public-read
相同的方式进行控制(默认情况下写入访问级别是脚本级别,但是该修饰符前面的 package
或 protected
将相应地扩大访问级别)。始终可以从任何软件包读取此变量的值。
示例:
// Inside file tutorial/one.fx |
编译并运行以下示例:
javafxc tutorial/one.fx two.fx |
这将输出 "Initialized this variable from a different package!
",从而证明了其他软件包中的对象字面值可以初始化 message
变量。但是,由于后续的写入访问级别是“仅脚本”级别,因此我们无法更改此变量的值:
// Inside file two.fx |
编译时错误为:
two.fx:12: message has script only (default) write access in tutorial.one |
这就证实了预期的行为:该变量可以公开初始化,但是后续的写入将由其他访问级别来控制。