Ruby – クラスの継承について

標準的

親クラスのメソッドは子クラスから利用可能で、子クラス独自のメソッド定義が可能。

親クラスのメソッドの、子クラスでのオーバーライドも普通。

super

親クラスのメソッドの呼び出し

メソッドをオーバーライドするとき、superを使うと親クラスの同じ名前のメソッドを呼び出せる。

以下の例では、子クラスのメソッドが親クラスのメソッドをオーバーライドしつつ、その中で親クラスのメソッドをsuperで呼び出している。その結果、まず親クラスのメソッドが実行され、次に子クラスのメソッドで定義された処理が実行されている。

initialize内でのsuper

initialize()でもsuperを使える。以下の例での流れは次の通り。

  1. 子クラスBirdインスタンスbirdの生成時、Birdのコンストラクターが実行される
  2. Birdのコンストラクターはsuperで親クラスCreatureのコンストラクターを呼び出して実行し、親クラスのプロパティー@num_legsに2をセット
  3. その後子クラスBirdのコンストラクターで子クラスのプロパティー@num_wingsに2をセット
  4. bird.form()は子クラスのform()メソッドを呼び出し
  5. Birdform()メソッドはsuperで親クラスCreatureform()メソッドを呼び出し、@num_legsを表示
  6. その後Birdform()メソッドで@num_wingsを表示

public/protected/private

これらの挙動はC++やJavaにおける挙動と一部で異なる。詳しくはこちら

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です