#はじめに
Rubyのクラスについて改めて理解を深めるために、こちらの記事でまとめます。
#クラスとインスタンス
Rubyではデータの元となる設計図を作り、その設計図を元に実体となるデータを作ります。
その設計図のことをクラスといい、データをインスタンスといいます。
このクラスは親子関係を作ることができ、既存のクラスの情報を元に新しいクラスを作れます。
いわゆる「クラスの継承」です
#クラスの継承
クラスの継承とは既存のクラスを元に新しいクラスを作ることです。
このとき、新しいクラスを子クラスまたはサブクラス、元になったクラスを親クラスまたはスーパークラスと呼びます。
このクラスの継承という概念があることで、共通部分がまとめられるため非常に便利になります。
例えば、新幹線、地下鉄、汽車のクラスを作成するならば、3つに共通する情報をまとめた電車クラスを作成し、その電車クラスを継承したクラスを作成したほうが効率的なわけです。
各クラスは、電車クラスをもとに各々の機能を付け加えていけばいいわけです。
例えば、電車に共通する走る、止まるといった機能に加えて、新幹線では車内販売、地下鉄では吊り革、汽車では汽笛といったように機能を付け加えます。
#クラスの継承の実装
今回は車とパトカーの関係を例に実装を行います。
まずは以下をみます。
class Car #共通部分
def initialize(car_type, capacity)
@name = car_type
@capacity = capacity
end
def info
puts "車種:#{@name} 乗車定員:#{@capacity}人"
end
end
class PoliceCar < Car #Carクラスの共通部分を継承した上でのパトカークラス
def siren
puts "ウゥ〜ウゥ〜"
end
end
police_car = PoliceCar.new("パトカー", 5)
police_car.siren
あるクラスを継承して新しいクラスを作る場合には以下のように「新しいクラス < 元となるクラス」と書きます。上の例では、PoliceCarクラスがCarクラスを継承しています。
クラスを継承すると、親クラスから子クラスへは
①親のインスタンス変数
②親のインスタンスメソッド
が継承されます。
また、子クラスでは、継承と付け加え意外に、オーバーライドすることができます。
オーバーライドとは、親クラスのメソッドを子クラスに同名のメソッドを定義することによって上書きすることを指します。
下記の例では、CarクラスとPoliceCarクラスそれぞれでinfoメソッドを持っています。本来、PoliceCarクラスでは親クラスのCarクラスが持つinfoメソッドを継承しますが、オーバーライドした場合は、PoliceCarクラスのinfoメソッドとして機能します。
class Car
def initialize(car_type, capacity)
@name = car_type
@capacity = capacity
end
def info
puts "車種:#{@name} 乗車定員:#{@capacity}人"
end
end
class PoliceCar < Car
def info
puts "車種:#{@name} 乗車定員:#{@capacity}人 パトロール時間:24時間"
end
def siren
puts "ウゥ〜ウゥ〜"
end
end
police_car = PoliceCar.new("パトカー", 5)
police_car.info #これは、あくまでPoliceCarクラスのinfoメソッドとして振る舞う
#おわりに
以上、Rubyのクラスについてです。
こうした基礎的な部分についてもしっかり振り返っていきたいと思います。