search
LoginSignup
8

More than 3 years have passed since last update.

posted at

updated at

「ポリモーフィズムって何?」をRubyを使って説明してみた

はじめに

『オブジェクト指向でなぜつくるのか』を読んでいて、オブジェクト指向の三大要素の一つである、
ポリモーフィズムについてがいまいち理解できなかったので、Rubyを使って私なりにまとめてみました。

ポリモーフィズムとは

書籍では以下の説明でした

メソッドを呼び出す側を共通化する

「・・・・・・??」
さっぱりわからなかったので、ネットで調べてみたところ以下の説明に行き着きました。

同じメソッドでも継承したサブクラスによって振る舞いが異なる

なんとなくはイメージができるのですが、まだ納得し辛いので、Rubyを使って動きを見てみます。

Rubyで見てみる

sample.rb
class Animal
  attr_accessor :name

  def cry(voice='')
    "#{self.name}: #{voice}"
  end
end

class Dog < Animal
  def cry(voice='わんわん')
    super
  end
end

class Cat < Animal 
  def cry (voice='にゃーにゃー')
    super
  end
end

dog = Dog.new
dog.name = 'ポチ'

cat = Cat.new
cat.name = 'タマ'

dog.cry     #=>ポチ: わんわん
cat.cry     #=>タマ:   にゃーにゃー

どうでしょう?
dog1もcat1も同じcryメソッドを受けているのに、振る舞いが異なっていることがわかります。

参考

ポリモーフィズムを優しく解説します
ポリモーフィズム(多態性)ってなんだよ【Ruby】

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8