libro
www.tuyano.com
初心者のためのRubyプログラミング入門

オブジェクトを更に極める! (4/5)

作成:2012-08-25 20:35
更新:2012-08-25 20:35

■継承でクラスを拡張する

クラスは、常に「すべてを一から作る」というわけではありません。既にあるクラスを元にして新たなクラスを作ることもできます。これを可能にするのが「継承」という機能です。

継承は、既にあるクラスを受け継いで新しいクラスを作ることです。継承を利用すると、継承元のクラスにあるすべての機能をそのまま受け継ぎ、利用することができます。この継承は、以下のようにして利用します。

・継承を使ったクラス定義
class クラス名 << 継承するクラス名
    ……クラスの内容を記述する……
end

継承する元のクラスのことを「スーパークラス」、このクラスを元に新たに作ったクラスのことを「サブクラス」といいます。つまり、「class サブクラス << スーパークラス」というわけですね。サブクラスでは、スーパークラスにあるメソッドはもちろん、インスタンス変数やクラス変数などもすべてあるものとして利用できます。

では、実際にクラスの継承を使った例を挙げておきましょう。下のリストでは、PeoplePeople2という2つのクラスを定義し、利用しています。People2は、Peopleを継承して作成しています。People2printメソッドでは、People2にはないはずの@nameを使って表示を組み立てていますね。この@nameは、スーパークラスのPeopleに用意されていますから、People2になくともちゃんと使うことができるのです。


●オーバーライドについて
また、ここでは、スーパークラスであるPeopleにあるprintメソッドを、サブクラスのPeople2でも実装しています。こうすると、サブクラスのPeople2printを呼び出すと、(スーパークラスのprintではなく)サブクラス側のprintが呼び出されるようになります。つまり、継承したサブクラスに同じメソッドを用意することで、スーパークラスのメソッドを上書きし修正できるわけです。

このように、サブクラスでスーパークラスにあるメソッドを上書きすることを「オーバーライド」といいます。オーバーライドは、クラスの重要な機能の一つとしてしっかり覚えておきましょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

class People
	def initialize(name = "noname")
		@name = name.to_s
	end
	def print
		puts("NAME: " + @name)
	end
end

class People2 < People
	def initialize(name = "noname", age = 0)
		@name = name
		@age = age.to_i
	end
	def print
		puts("My name is " + @name + ". I'm " + @age.to_s + " old.")
	end
end

taro = People.new("taro")
hanako = People2.new("Hanako",24)
taro.print
hanako.print

※関連コンテンツ

「初心者のためのRubyプログラミング入門」に戻る