LoginSignup
0
1

More than 3 years have passed since last update.

継承の仕組み

Posted at

継承の仕組み

あるクラスを継承して新しいクラスを作る場合には以下のように「新しいクラス < 元となるクラス」と書きます。

【例】sample.rb

class PoliceCar < Car

end

クラスを継承すると、親クラスから子クラスへ以下のものが引き継がれます。

親のインスタンス変数
親のインスタンスメソッド
例えば、Carクラスを継承したPoliceCarクラスを作成するコードを以下に示します。

【例】sample.rb
class Car
  def initialize(car_type, capacity)
    @name = car_type
    @capacity = capacity
  end

  def info
    puts "車種:#{@name} 乗車定員:#{@capacity}人"
  end
end

  class PoliceCar < Car

  end

  police_car = PoliceCar.new("パトカー", 5)

  police_car.info


# ターミナル出力結果
# 車種:パトカー 乗車定員:5人

上記を見てみると、PoliceCarクラスの中には何も記述をしていませんが、継承元のCarクラスのインスタンス変数およびインスタンスメソッドを使うことができます。

インスタンスメソッドを追加する方法
続いて子クラスに独自のインスタンスメソッドを追加する方法について
子クラス内に新しくメソッドの定義を追加するだけです。

先ほどのPoliceCarクラスを例に説明をします。以下を見てください。

br【例】sample.rb
class Car
   def initialize(car_type, capacity)
     @name = car_type
     @capacity = capacity
   end

   def info
     puts "車種:#{@name} 乗車定員:#{@capacity}人"
   end
end

class PoliceCar < Car
   def siren
     puts "ウゥ〜ウゥ〜"
   end
end

police_car = PoliceCar.new("パトカー", 5)

police_car.siren

# ターミナル出力結果
# ウゥ〜ウゥ〜

上記では、PoliceCarクラス内にsirenメソッドを新たに追加し、それを実行しています。
このように子クラスにインスタンスメソッドを追加することで、そのクラス固有のメソッドを定義することができます。

メソッドを上書きする方法

最後にメソッドを上書きする方法について.親クラスにあるメソッドと同じ名前のメソッドを子クラスで定義すると、メソッドを上書きすることができます。これをメソッドの「オーバーライド」と呼びます。

オーバーライド

オーバーライドとは、親クラスのメソッドを子クラスに同名のメソッドを定義することによって上書きすることを指します。

【例】sample.rb

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

# ターミナル出力結果
# 車種:パトカー 乗車定員:5人 パトロール時間:24時間

上記では、Carクラスで定義されたinfoメソッドと同名のメソッドをPoliceCarクラス内で定義しています。
これによって、PoliceCarクラスを元に生成されたインスタンスでinfoメソッドを実行すると、上書きされた処理が実行されるようになります。

問問題.1
以下の仕様にしたがってコードを記述してください。

・Personクラスはプロパティ name, ageを持っている。
・StudentクラスはPersonクラスを継承している。
・Studentクラスにはintroduceメソッドが定義されている。実行すると
 「私の名前は◯◯です。◯歳です」と表示がされる。
・Studentクラスのインスタンスを作成し、introduceメソッドを実行する。

【例】
class Animal
  def initialize(name)
    @name = name
  end
end

class Dog < Animal
  def name
    puts "名前は#{@name}です。"
  end
end

pochi = Dog.new("ポチ")
pochi.name
class Person
  def initialize(name,age)
    @name = name
    @age  = age
  end
end

class Student < Person
  def introduce
   puts "私の名前は#{@name}です。#{@age}才です。" 
  end
end

taro = Student.new("Taro",13)
taro.introduce
0
1
0

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
  3. You can use dark theme
What you can do with signing up
0
1