クラス
クラスの宣言
classで行います。
関数と同じで、以下の四通りの記述方法があります。
class {
class クラス名 {
class クラス名() {
class クラス名(引数, 引数) {
クラスは宣言したただけでは実体が作られないため、newを使って実体を作成する必要があります。
引数はそのままコンストラクタの引数となります。
コンストラクタ
クラス宣言の内部に書かれた文は、全てコンストラクタとして扱われます。
コンストラクタは、newを使って実体を作成時に実行されます。
デストラクタ
デストラクタは、固定名destructor()で定義します。
データメンバ
データメンバは、コンストラクタ内で利用された変数がそのままデータメンバとして利用されます。
メソッド
メソッドは、関数の宣言と同一です。(functionで定義する)
呼び出し方法は、クラスの実体.メソッドの形になります。(ドット演算子を使う)
クラス内クラス
クラスは内部にクラスを持つことが出来ます。(継承も可)
例:
class A { # クラスAの宣言
class B { # クラスBの宣言
class C { # クラスCの宣言
function destructor(){ # デストラクタの宣言
}
}
}
}
クラスの実体化
newを使います。
実体化の手順としては、
- クラスを実体化(new クラス名)
- 内部のメソッドを実体化
- コンストラクタを実行
- 内部にクラスを持つならば、そのクラスを実体化
- クラス内クラスのメソッドを実体化
- クラス内クラスのコンストラクタを実行
- 以降繰り返し
前述クラス内クラスの例に沿って説明すると、
例:
a = new A; # クラス A B C とも実体化し、
それぞれのコンストラクタが呼び出される
b = new A.B; # クラス B C が実体化され、
それぞれのコンストラクタが呼び出される
クラスの破棄
クラスを明示して破棄したい場合、deleteを使います。
(クラスの参照具合によっては、即時に破棄されるとは限りません。)
データメンバ/メソッドのアクセス権限
public、privateを宣言に付与します。
クラスの継承
クラスは、宣言時にextends 元クラス名とすることで、継承することができます。
継承時には、コンストラクタ/デストラクタ共、自動的に元クラスの物が呼び出されます。
呼び出し順序は、
親クラスのコンストラクタ→親クラスメンバクラスのコンストラクタ→
子クラスのコンストラクタ→子クラスメンバクラスのコンストラクタ
子クラスメンバクラスのデストラクタ→子クラスのデストラクタ→
親クラスメンバクラスのコンストラクタ→親クラスのデストラクタ
になります。
