前回の記事では、ポケモンを例に継承を紹介しました。
今回はオーバーライドです。
なお、掲載しているコードは実際のゲーム中で使われているものと異なります。
オーバーライド
クラスの継承では、子クラスで親クラスのメソッドを使用することができます。
オーバーライドは、継承した親クラスのメソッドを、子クラスが独自の処理に書き換える手法のことです。
オーバーライドは親クラスのメソッドを上書きするわけではないため、親クラスではもともとのメソッドを引き続き使用できます。
例えば、モンスターボールというクラスがあり、それを継承したマスターボールというクラスがあったとします。
このとき、モンスターボールでは野生ポケモンの捕獲成功率を計算によって求めますが、マスターボールは必ず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
コメント