ポリモーフィズムとは?
⇨ 同じメソッドでありながら違う振る舞い
ポケモンの例(ポケモンクラスという親クラスと子クラス(ゼニガメ(Squirtle)とヒトカゲ( Charmander)クラスがあるという構造になっています)
# ポケモンクラスの定義 class Pokemon def initialize(name) @name = name end def attack # デフォルトの攻撃 puts "#{@name}の攻撃!" end end # ゼニガメクラスの定義(ポケモンクラスを継承) class Squirtle < Pokemon def initialize(name) super(name) end def attack # ゼニガメの攻撃 puts "#{@name}のハイドロポンプ!" end end # ヒトカゲクラスの定義(ポケモンクラスを継承) class Charmander < Pokemon def initialize(name) super(name) end def attack # ヒトカゲの攻撃 puts "#{@name}のかえんほうしゃ!" end end # インスタンスの作成とポリモーフィズムの実行 squirtle = Squirtle.new("ゼニガメ") charmander = Charmander.new("ヒトカゲ") # ポリモーフィズムを使ってattackメソッドを呼び出す squirtle.attack. 出力結果 ヒトカゲのかえんほうしゃ charmander.attack. 出力結果 ゼニガメのハイドロポンプ
ここでの注目はattackメソッドです。
子クラス内(ゼニガメかヒトカゲ)で親クラス(ポケモンくらす)のメソッドを定義するとメソッドの上書きできる(オーバーライド).
つまりゼニガメクラスのインスタンスにattackメソッドを呼ぶとゼニガメクラス内に記載されたattackメソッドが呼ばれる。こうすることでattackメソッドの呼び出し方はクラスが違っても変わらないがメソッドの中身はクラスごとに変更することができる。