JScript の修飾子
JScript の修飾子は、クラス、インターフェイス、またはクラスやインターフェイスのメンバーの、動作および参照可能範囲を変更します。 修飾子はクラスやインターフェイスを定義するときに指定しますが、通常は必須ではありません。
参照可能範囲の修飾子
参照可能範囲の修飾子は、外部コードによるクラス、インターフェイス、およびクラスやインターフェイスのメンバーへのアクセスを制限します。 参照可能範囲を制限することで、特殊な内部メソッドやフィールドの呼び出しを禁止し、適切なオブジェクト指向プログラミングを促進できます。
既定では、クラスにアクセスできるコードは、そのクラスのメンバーにもアクセスできます。 参照可能範囲の修飾子を使用すると、外部コードから特定のクラス メンバーへのアクセスを選択的に禁止して、同じパッケージのクラスだけにメンバーへのアクセスを許可したり、派生クラスだけにクラス メンバーへのアクセスを許可したりできます。
参照可能範囲の修飾子は、グローバル関数やグローバル変数には適用できません。 同時に指定できる参照可能範囲の修飾子は、protected と internal だけです。
参照可能範囲の修飾子 |
対象 |
説明 |
---|---|---|
クラス、クラスのメンバー、インターフェイス、インターフェイスのメンバー、または列挙型 |
クラスにアクセスできるコードは、参照可能範囲の制限を受けることなく、クラスのメンバーを参照できます。 JScript では、クラス、インターフェイス、およびクラスとインターフェイスのメンバーは既定でパブリックです。 |
|
クラスのメンバー |
クラスのメンバーは、宣言されたクラス内だけで参照可能です。 派生クラスからは参照できません。 現在のクラス以外のコードからは、プライベート メンバーにアクセスできません。 |
|
クラスのメンバー |
クラスのメンバーは、宣言されたクラス内と、そのクラスの派生クラスだけで参照可能です。 protected 修飾子は、パッケージ スコープのクラスには使用できませんが、入れ子になったクラスでは使用できます。 |
|
クラス、クラスのメンバー、列挙型 |
クラス、クラスのメンバー、または列挙型は、宣言されたパッケージ内のどこからでも参照できます。 パッケージの外部からは参照できません。 |
継承の修飾子
継承の修飾子は、派生クラスのメソッドおよびプロパティが、基本クラスのメソッドおよびプロパティをオーバーライドする方法を制御します。 この修飾子を使用すると、作成するクラスが派生クラスのメソッドによってオーバーライドされるかどうかを管理できます。
既定では、派生クラスでバージョン セーフ属性の hide が使用されていない場合、基本クラスのメソッドは派生クラスのメソッドによってオーバーライドされます。 この属性はオーバーライドを妨げます。 継承の修飾子を使用すると、特定のメソッドがオーバーライドされるかどうかを制御できます。
場合によっては、基本クラスのメソッドがオーバーライドされないようにする必要があります。 たとえば、パッケージでクラスを定義する場合、final 修飾子を使用して、派生クラスがクラスのメソッドやプロパティを変更しないように設定できます。
クラスの特定のメソッドをオーバーライドする必要がある場合もあります。 たとえば、基本的な機能を提供し、一部のメソッドに abstract 修飾子を使用するクラスを作成できます。 抽象メソッドの実装は、派生クラスの作成者が行います。
バージョン セーフ修飾子もオーバーライドを管理しますが、この修飾子は基本クラス側からではなく、派生クラス側からオーバーライドを管理します。 バージョン セーフ修飾子は、オーバーライドしている基本クラスのメソッドに、継承の修飾子が指定されていない場合にだけ効果があります。
継承の修飾子を 2 つ組み合わせたり、継承の修飾子を static 修飾子と組み合わせたりすることはできません。
継承の修飾子 |
対象 |
説明 |
---|---|---|
クラス、メソッド、またはプロパティ |
メソッドまたはプロパティの場合は、メンバーの実装がないことを示します。 クラスの場合は、実装されていないメソッドが 1 つ以上あることを示します。 抽象クラス、または抽象メンバーを含むクラスは、new キーワードを使ってインスタンス化できませんが、基本クラスとして使用できます。 |
|
クラス、メソッド、またはプロパティ |
拡張されないクラス、またはオーバーライドされないメソッドに使用します。 final 修飾子を使用すると、派生クラスが重要な関数をオーバーライドできず、クラスの動作は変更されません。 final 修飾子を指定したメソッドを隠ぺいまたはオーバーロードすることはできますが、オーバーライドすることはできません。 |
バージョン セーフ修飾子
バージョン セーフ修飾子は、基本クラスのメソッドをオーバーライドする派生クラスのメソッドを制御します。 この修飾子を使用すると、作成するクラスが基本クラスのメソッドをオーバーライドするかどうかを管理できます。
既定では、派生クラスのメソッドは基本クラスのメソッドをオーバーライドします。ただし、基本クラスの定義に継承の修飾子を指定すると、オーバーライドを妨げることができます。 バージョン セーフ修飾子を使用すると、特定のメソッドがオーバーライドされるかどうかを制御できます。
場合によっては、基本クラスのメソッドがオーバーライドされないようにする必要があります。 たとえば、クラスを拡張して基本クラスのメソッドの動作を変更する場合があります。 基本クラスのメソッドがオーバーライドされないようにする場合は、メソッドの宣言で hide 修飾子を使用します。
基本クラスの特定のメソッドをオーバーライドする場合もあります。 たとえば、クラスを変更せずに、クラスのメソッドを変更する場合などです。 クラスを拡張し、メソッドの宣言に override 修飾子を使用すると、新しいメソッドで基本クラスをオーバーライドできます。
バージョン セーフ修飾子の使用が適切かどうかは、基本クラスのメソッドの宣言で継承の修飾子が使用されているかどうかに依存します。 final 修飾子を指定した基本クラスのメソッドは、オーバーライドされません。abstract 修飾子を指定した基本クラスのメソッドは、基本クラスの抽象メソッドを明示的に実装しない限り隠ぺいされません。
バージョン セーフ修飾子を 2 つ組み合わせたり、バージョン セーフ修飾子を static 修飾子と組み合わせたりすることはできません。 バージョン セーフ モードで実行している場合、バージョン セーフ修飾子は、基本クラスのメソッドをオーバーライドする各メソッドに 1 つしか使用できません。
バージョン セーフ修飾子 |
対象 |
説明 |
---|---|---|
メソッドまたはプロパティ |
基本クラスの同じ名前のメンバーをオーバーライドしません。 |
|
メソッドまたはプロパティ |
既定では、基本クラスの同じ名前のメンバーをオーバーライドします。 |
expando 修飾子
expando 修飾子を使用すると、クラス ベースのオブジェクトが JScript オブジェクトと同様に動作します。 メソッドとプロパティは、expando オブジェクトに動的に追加できます。 詳細については、「プロトタイプ ベースのオブジェクト」を参照してください。
expando 修飾子は、他の修飾子と関係なく使用できます。
修飾子 |
対象 |
説明 |
---|---|---|
クラスまたはメソッド |
クラスの場合、動的なプロパティ (expando) を格納および取得できる、既定のインデックス付きプロパティが与えられます。 メソッドの場合、expando オブジェクトのコンストラクターであることを示します。 |
static 修飾子
static 修飾子は、クラスのメンバーが、クラスのインスタンスではなくクラス自身に属していることを示します。 したがって、クラスに固有のデータとメソッドは、特定のインスタンスに関連付けられません。
static 修飾子は、バージョン セーフ修飾子または継承の修飾子と組み合わせることができません。
修飾子 |
対象 |
説明 |
---|---|---|
メソッド、プロパティ、フィールド、またはクラス |
メソッドの場合、クラスのインスタンスを必要とせずに呼び出せることを示します。 プロパティおよびフィールドの場合、すべてのインスタンスで 1 つのコピーが共有されることを表します。 static 修飾子と、クラスを初期化するコードを表す static ステートメントを混同しないようにしてください。 |