class ステートメント
クラスの名前と、クラスを構成する変数、プロパティ、およびメソッドの定義を宣言します。
[modifiers] class classname [extends baseclass] [implements interfaces]{
[classmembers]
}
引数
modifiers
省略可能です。 クラスの参照可能範囲と動作を制御する修飾子。classname
必ず指定します。 class の名前。標準的な変数の名前付け規則に従って名前を付けます。extends
省略可能です。 クラス classname がクラス baseclass を拡張することを示すキーワード。 このキーワードが指定されていない場合、System.Object を拡張する標準の JScript 基本クラスが作成されます。baseclass
省略可能です。 拡張されるクラスの名前。implements
省略可能です。 クラス classname が 1 つ以上のインターフェイスを実装することを示すキーワード。interfaces
省略可能です。 インターフェイス名のコンマ区切りのリスト。classmembers
省略できます。 classmembers には、function ステートメントで定義されるメソッドまたはコンストラクターの宣言、function get および function set ステートメントで定義されるプロパティの宣言、var または const ステートメントで定義されるフィールドの宣言、static ステートメントで定義される初期化子の宣言、enum ステートメントで定義される列挙の宣言、または入れ子になったクラス宣言を指定できます。
解説
クラスの修飾子に応じて、クラスを使用してインスタンスを作成したり、クラスを他のクラスの基本クラスにしたりできます。 クラスに abstract 修飾子が指定されていると、他のクラスを拡張するための基本クラスとして機能します。ただし、abstract クラスのインスタンスは作成できません。 クラスに final 修飾子が指定されている場合、new 演算子を使用してクラスのインスタンスを作成できますが、基本クラスとしては使用できません。
メソッドおよびコンストラクターはオーバーロードされる場合があります。 したがって、複数のメソッド (またはコンストラクター) が同じ名前を持つ場合もあります。 オーバーロードされたクラスのメンバーは、一意のシグネチャによって区別されます。シグネチャは、メンバーの名前と、それぞれの仮パラメーターのデータ型によって構成されます。 オーバーロードにより、クラスは類似する機能ごとにメソッドをグループ化できます。
クラスは、extends キーワードを使用することで、既存の基本クラスの機能を継承できます。 基本クラスのメソッドは、同じシグネチャを持つ新しいメソッドを宣言することでオーバーライドできます。 新しいクラスのメソッドは、super ステートメントを使用して、オーバーライドされた基本クラスのメンバーにアクセスできます。
クラスは、implements キーワードを使用して、1 つ以上のインターフェイスに基づいて作成できます。 インターフェイスはメンバーの実装を提供しないため、クラスはインターフェイスから動作を継承できません。 インターフェイスは、他のクラスとやり取りするときに使用する "シグネチャ" をクラスに与えます。 インターフェイスを実装するクラスが abstract でない場合は、インターフェイスで定義されている各メソッドに実装を提供する必要があります。
修飾子を指定すると、クラスのインスタンスは、より JScript オブジェクトらしく動作します。 動的に追加されるプロパティをクラスのインスタンスで処理するには、expando 修飾子を使用します。この修飾子は、クラスの既定のインデックス付きプロパティを自動的に作成します。 expando プロパティにアクセスするには、JScript の Object オブジェクトの角かっこ表記を使用する必要があります。
例 1
次の例では、さまざまなフィールドとメソッドを持つ CPerson クラスを作成します。それぞれの詳細は省略されています。 CPerson クラスは、2 番目の例の CCustomer クラスの基本クラスとなります。
// All members of CPerson are public by default.
class CPerson{
var name : String;
var address : String;
// CPerson constuctor
function CPerson(name : String){
this.name = name;
};
// printMailingLabel is an instance method, as it uses the
// name and address information of the instance.
function printMailingLabel(){
print(name);
print(address);
};
// printBlankLabel is static as it does not require
// any person-specific information.
static function printBlankLabel(){
print("-blank-");
};
}
// Print a blank mailing label.
// Note that no CPerson object exists at this time.
CPerson.printBlankLabel();
// Create a CPerson object and add some data.
var John : CPerson = new CPerson("John Doe");
John.address = "15 Broad Street, Atlanta, GA 30315";
// Print a mailing label with John's name and address.
John.printMailingLabel();
このコードの出力は次のようになります。
-blank-
John Doe
15 Broad Street, Atlanta, GA 30315
例 2
CCustomer クラスは CPerson から派生します。追加されたフィールドとメソッドは、CPerson クラスの汎用メンバーには適用できません。
// Create an extension to CPerson.
class CCustomer extends CPerson{
var billingAddress : String;
var lastOrder : String;
// Constructor for this class.
function CCustomer(name : String, creditLimit : double){
super(name); // Call superclass constructor.
this.creditLimit = creditLimit;
};
// Customer's credit limit. This is a private field
// so that only member functions can change it.
private var creditLimit : double;
// A public property is needed to read the credit limit.
function get CreditLimit() : double{
return creditLimit;
}
}
// Create a new CCustomer.
var Jane : CCustomer = new CCustomer("Jane Doe",500.);
// Do something with it.
Jane.billingAddress = Jane.address = "12 Oak Street, Buffalo, NY 14201";
Jane.lastOrder = "Windows 2000 Server";
// Print the credit limit.
print(Jane.name + "'s credit limit is " + Jane.CreditLimit);
// Call a method defined in the base class.
Jane.printMailingLabel();
このコードの出力は次のようになります。
Jane Doe's credit limit is 500
Jane Doe
12 Oak Street, Buffalo, NY 14201