継承に関して

☆継承

継承とは、すでに定義されているクラスを拡張して、新しいクラスを作ることを言います。


先日の学級の例で言うと、C組(クラス)を継承していきものがかり(クラス)を作るとします。
いきものがかりは、係の中で新たなルールを策定します。
このとき、C組をスーパークラスいきものがかりをサブクラスと言います。


サブクラスは、2つ以上のスーパークラスを持つことができません。

つまり、いきものがかりはA組やB組には属することはできないということです。(まぁ当たり前ですよね。)


参照:クラスメソッドとインスタンスメソッド - mic_footprints


具体的な継承の例は次回以降にします。


継承が出てきたので、ついでにMix-inという概念も説明しておこうと思います。
継承と似て非なる概念としてMix-inというものがございます。


☆Mix-in

Mix-inを説明する前に、モジュールを説明しなければなりません。

モジュールは、クラスとは違い、インスタンスを持たず、処理方法だけの集まりです。



たとえば、
SchoolモジュールにgetAwayメソッドがあるとします。
getAwayメソッド(〜.getAway(引数))は引数を廊下に立たせるという処理を行うとします。

つまり、Schoolモジュール内にgetAwayメソッドが格納されているというイメージです。


こんなときに、getAwayメソッドをA組クラスでもB組クラスでもC組クラスでも使用したいとします。


じゃあ、Mix-inすればいい!ということになります。


そう、あるモジュールの処理を、あるクラスで使用したい場合に行うのが、Mix-in(モジュールをクラスに混ぜ合わせること)です。


具体的にどういったメリットがあるのでしょうか?


先ほどの例みたいに、いろいろのクラスで同一のメソッドを使用したい場合等に利用したりします。


???


継承でいいじゃないですか?


クラスは、必ず、1つのスーパークラスしかもてません。
で、別々のスーパークラスを持っているクラスで、同一のメソッドを使用する時、継承では、処理できませんね。


そういったときにMix-inで処理をするのです。


Mix-inの具体的な例

# A組クラスには一郎君、B組クラスには明子さん、C組には花子さんがいるとします。
# 上記の三人は宿題を忘れましたので、廊下に立たされることになりました。

class ASchool.getAway("一郎君")
School.getAway("明子さん")
School.getAway("花子さん")

もしくは、

include School # インクルードする

getAway("一郎君")
getAway("明子さん")
getAway("花子さん")


includeはどこかで見た方もいるかもしれません。
そう、以前にも出てきたinclude Mathです。


参照:演算と変数に関して - mic_footprints