オブジェクトを更に極める! (4/5)
作成:2012-08-25 20:35
更新:2012-08-25 20:35
更新:2012-08-25 20:35
■継承でクラスを拡張する
クラスは、常に「すべてを一から作る」というわけではありません。既にあるクラスを元にして新たなクラスを作ることもできます。これを可能にするのが「継承」という機能です。
継承は、既にあるクラスを受け継いで新しいクラスを作ることです。継承を利用すると、継承元のクラスにあるすべての機能をそのまま受け継ぎ、利用することができます。この継承は、以下のようにして利用します。
・継承を使ったクラス定義
継承する元のクラスのことを「スーパークラス」、このクラスを元に新たに作ったクラスのことを「サブクラス」といいます。つまり、「class サブクラス << スーパークラス」というわけですね。サブクラスでは、スーパークラスにあるメソッドはもちろん、インスタンス変数やクラス変数などもすべてあるものとして利用できます。
では、実際にクラスの継承を使った例を挙げておきましょう。下のリストでは、PeopleとPeople2という2つのクラスを定義し、利用しています。People2は、Peopleを継承して作成しています。People2のprintメソッドでは、People2にはないはずの@nameを使って表示を組み立てていますね。この@nameは、スーパークラスのPeopleに用意されていますから、People2になくともちゃんと使うことができるのです。
このように、サブクラスでスーパークラスにあるメソッドを上書きすることを「オーバーライド」といいます。オーバーライドは、クラスの重要な機能の一つとしてしっかり覚えておきましょう。
継承は、既にあるクラスを受け継いで新しいクラスを作ることです。継承を利用すると、継承元のクラスにあるすべての機能をそのまま受け継ぎ、利用することができます。この継承は、以下のようにして利用します。
・継承を使ったクラス定義
class クラス名 << 継承するクラス名
……クラスの内容を記述する……
end
継承する元のクラスのことを「スーパークラス」、このクラスを元に新たに作ったクラスのことを「サブクラス」といいます。つまり、「class サブクラス << スーパークラス」というわけですね。サブクラスでは、スーパークラスにあるメソッドはもちろん、インスタンス変数やクラス変数などもすべてあるものとして利用できます。
では、実際にクラスの継承を使った例を挙げておきましょう。下のリストでは、PeopleとPeople2という2つのクラスを定義し、利用しています。People2は、Peopleを継承して作成しています。People2のprintメソッドでは、People2にはないはずの@nameを使って表示を組み立てていますね。この@nameは、スーパークラスのPeopleに用意されていますから、People2になくともちゃんと使うことができるのです。
●オーバーライドについて
また、ここでは、スーパークラスであるPeopleにあるprintメソッドを、サブクラスのPeople2でも実装しています。こうすると、サブクラスのPeople2でprintを呼び出すと、(スーパークラスのprintではなく)サブクラス側のprintが呼び出されるようになります。つまり、継承したサブクラスに同じメソッドを用意することで、スーパークラスのメソッドを上書きし修正できるわけです。このように、サブクラスでスーパークラスにあるメソッドを上書きすることを「オーバーライド」といいます。オーバーライドは、クラスの重要な機能の一つとしてしっかり覚えておきましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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
※関連コンテンツ