メンバ変数


図 5.3. メンバ変数

関数定義 | 変数宣言 | override変数宣言 | initブロック | postinitブロック

関数定義変数宣言はそれぞれの章で取り上げます。残りのメンバ変数は以下で取り上げます。


initブロック

図 5.4. initブロック

'init' ブロック

initブロックは任意のブロックで、インスタンスの初期化の最終段階で実行されます。


postinitブロック

図 5.5. postinitブロック

'postinit' ブロック

postinitブロックは任意のブロックで、インスタンスの初期化が完全に終わった後で実行されます。


override変数宣言

図 5.6. override変数宣言

'override' 'var' 変数名 ['=' 初期化式] [onReplrace句]

override変数宣言は、サブクラスのインスタンスのvarのデフォルト値の変更または、 varのon replace句を追加します。 初期化式とon replace句のいずれか、あるいは両方が使われなければなりません。 初期化式がデフォルト値をオーバーライドし、さらに、on replace句は変更時に実行されるブロックを追加します。 サブクラスに定義されたどんなon replace句もその変数の変更時に実行されます。 これはサブクラスの不変式を管理する上で重要です。


関数override定義

あなたはoverride修飾子を使って、関数をオーバーライドすることにより、サブクラスでインスタンス関数の定義を変更することができます。

ここにサブクラスSubで関数greetingの定義をオーバーライドします。

class Base {
   function greeting() : Void { 
      println("Hi")
   }
}

class Sub extends Base {
   override function greeting() : Void { 
      println("Howdy")
   }
}

def b = Base {};
def s = Sub {};

b.greeting();
s.greeting();

印字結果:

Hi
Howdy

Javaのメソッドもオーバーライドすることができ、例えば、 オーバーライド可能なtoString()メソッドでオブジェクトが印字されるように変更するには

class Point { 
   var x : Number; 
   var y : Number; 
   override function toString() : String {
      "Point {x}, {y}"
   } 
} 

def p = Point {x: 4.6 y: 8.9 };
println( p );

印字結果:

Point 4.6, 8.9


Home