8章. アクセス修飾子


以下のアクセス修飾子はスクリプトとインスタンスのメンバに適用します。 インスタンス関数、スクリプト関数、インスタンス変数、そしてスクリプト変数です。 protectedを除けば、それらはクラスにも適用します。

表 8.1. 基本アクセス修飾子

  スクリプト限定アクセス。基本アクセス修飾子が提供されない場合にこれがデフォルトになります。 スクリプト限定アクセスとは、それが定義されているスクリプトの中でのみアクセスできるという意味です。
package packageアクセス。それが定義されているパッケージの中でのみアクセスが可能です。
protected protectedアクセス。それが定義されているパッケージとサブクラスからアクセスが可能です。 それがあなたがprotectedアクセスについて本当に知りたいと思っているほぼすべてです。 しかし詳しく知りたいなら、読み続けてください。 オブジェクトのprotectedメンバーは、パッケージの外からアクセスすることができ、 そこではそのオブジェクトの実装に責任のあるコードによってのみ宣言されます。 次を意味します。 protectedメンバーが宣言されているCクラスがあります。 CのサブクラスSの本体の中でのみアクセスが許されています。 加えて、Idがインスタンス変数やインスタンス関数を示すなら、そのとき、 アクセスが正規の名称のQ.Idによる場合、ここでQは式の名称ですが、 QがSであるかSのサブクラスである場合のみアクセスが許されます。 E.Id式という変数アクセスによるアクセスなら、ここではEは基礎式ですが、 EがSであるかSのサブクラスである場合のみアクセスが許されます。 (注釈:わかりません、意味が)
public どこからでもアクセスが可能です。

これらの基本アクセス修飾子はすべてのアクセスの形式に適用します。 クラスの生成、クラスへの参照、関数の呼び出し、スクリプトまたはインスタンス変数の読み書き、 そしてインスタンス変数のオブジェクトリテラルの中でのオーバーライド、設定やバインド、があります。

JavaFXのオブジェクトリテラルの中心的な使い方のため、 インスタンス変数は外部に見えがちです。そして、そのため、アクセス修飾子はもっと改良が必要です。 二つのアクセス修飾子がインスタンス変数とスクリプト変数だけに適用されます。

表 8.2. varアクセス修飾子

public-readvarはどこからでも参照が可能です。
public-initvarはどこからでも初期化と参照が可能です。 初期化される場所はオブジェクトリテラルでの(バインドでない)設定を意味します。

public-readdefで許されていますが、publicとして評価されます。 (訳注:defはvarと違ってそもそも初期化しかできないからです。)

これらのアクセス修飾子には基本アクセス修飾子が追加されます。ここに例があります。

表 8.3. アクセス修飾子サンプル

var x; 変数の宣言です。変数は(オブジェクトリテラルで)初期化することができます。 (サブクラスで)オーバーライドもでき、参照もでき、割り当てや(デフォルト式またはオブジェクトリテラルの初期化での) バインドが可能です。デフォルトのパーミッションは、スクリプト限定アクセスであり、アクセス修飾子が不要です。 変数はスクリプトの中でのみ、初期化、オーバーライド、参照、割り当てやバインドが可能です。
def x = 100; xの定義です。見たままです。定義は変更できません。それらは(オブジェクトリテラルで)初期化できず、 (サブクラスで)オーバーライドできず、割り当てができません。定義の値は参照が可能です。 デフォルトのパーミッションはスクリプト限定アクセスであり、アクセス修飾子が不要です。 定義はスクリプトの中でのみ参照が可能です。定義にはバインド式が使えます。
public var x; public変数の宣言です。この変数はどこからでも初期化、オーバーライド、参照、割り当てやバインドが可能です。
public def x = "Hi"; publicなxの定義です。この定義はどこからでも参照が可能です。 たとえどんなアクセス修飾子でも、定義は割り当ても(オブジェクトリテラルでの)初期化もオーバーライドもできません。
protected var x; パッケージやサブクラスからアクセス可能な変数の宣言です。 (上のprotectedのねじれた部分を参照してください(★リンク★))
protected def x = bind z; パッケージやサブクラスから参照可能なxの定義です。
package var x; パッケージからアクセス可能な宣言です。
package def x = 42; パッケージから参照可能なxの定義です。
public-read var x; どこからでも参照可能な変数ですが、スクリプトの中でのみ初期化や書き込み(割り当てやバインド)ができます。 (スクリプトでのアクセスがデフォルトなので)
public-read package var x; どこからでも参照可能な変数ですが、パッケージの中でのみ初期化や書き込み(割り当てやバインド)ができます。
public-init var x; (オブジェクトリテラルで)初期化でき、どこからでも参照可能な変数ですが、 そのスクリプトの中でだけ書き込み(割り当てやバインド)ができます。 (スクリプトでのアクセスがデフォルトなので)
public-init package var x; (オブジェクトリテラルで)初期化でき、どこからでも参照可能な変数ですが、 そのパッケージの中でのみ書き込み(割り当てやバインド)ができます。


Home