ポケモンを例に考えるオブジェクト指向~オーバーライド~

前回の記事では、ポケモンを例に継承を紹介しました。

今回はオーバーライドです。

なお、掲載しているコードは実際のゲーム中で使われているものと異なります。

スポンサーリンク
スポンサーリンク

オーバーライド

クラスの継承では、子クラスで親クラスのメソッドを使用することができます。

オーバーライドは、継承した親クラスのメソッドを、子クラスが独自の処理に書き換える手法のことです。

オーバーライドは親クラスのメソッドを上書きするわけではないため、親クラスではもともとのメソッドを引き続き使用できます

例えば、モンスターボールというクラスがあり、それを継承したマスターボールというクラスがあったとします。

このとき、モンスターボールでは野生ポケモンの捕獲成功率を計算によって求めますが、マスターボールは必ず100%になります。

オーバーライドはオブジェクト指向の概念というより、オブジェクト指向プログラミングで使えるテクニックの一つです。

プログラミング言語Rubyで書いてみる

モンスターボールというクラスとそれを継承したマスターボールというクラスを作成し、モンスターボールの捕獲成功率を計算するメソッドをマスターボールでオーバーライドします。

require 'bigdecimal'

# モンスターボールクラスを定義
class PokeBall
  # 捕獲成功率を計算するメソッド
  def self.capture_rate(max_hp, current_hp)
    BigDecimal(((3.0 * max_hp - 2.0 * current_hp) / (3.0 * max_hp)).to_s).floor(2).to_f
  end
end

# マスターボールクラスを定義
class MasterBall < PokeBall
  # 捕獲成功率を計算するメソッドをオーバーライド
  def self.capture_rate(max_hp, current_hp)
    1.0
  end
end

# 捕獲成功率を表示
p PokeBall.capture_rate(100.0, 50.0)
p MasterBall.capture_rate(100.0, 50.0)

出力例

0.66
1.0

コメント