.net column
.NET開発者のためのブログメディア

Rubyの継承方法について紹介します|superclassメソッドを使いこなそう

2020年10月29日
SE
Rubyの継承はどんなメリットがあるのですか。
PM
似たような処理を行うクラスや使用頻度の高いクラスなど共通部分のあるクラスを継承すると、コードが整理されて読みやすくなるというメリットがあります。

Rubyの継承とは?


今回は、Rubyの継承について説明します。

Rubyでは、定義済みのクラスを継承して新しいクラスを作成できます。継承元のクラスをスーパークラス(親クラス)、継承して作成したクラスをサブクラスといいます。

似たような処理を行うクラスや使用頻度の高いクラスなど、共通部分のあるクラスを利用するために継承します。継承することで、コードが整理されて読みやすくなります。

Rubyの継承に興味のある方はぜひご覧ください。

継承する方法

Rubyでクラスを継承するには「<」を使用します。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

class SubClass < SuperClass とすることで、SuperClassを継承したSubClassとなります。
このように、Rubyでクラスを継承するには「<」を使用します。

オーバーライドとは

オーバーライドとは、スーパークラスで定義されているメソッドを、サブクラスで同じ名前で定義することを言います。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

hogeメソッドがオーバーライドされていることが分かります。

このように、オーバーライドを使うことで、スーパークラスで定義されているメソッドをサブクラス側で自由に書き換えて使用することができます。

スーパークラスのメソッドを呼ぶ方法

オーバーライドされたサブクラス側のメソッドから、スーパークラス側のメソッドを呼び出すこともできます。その際、superメソッドを使用します。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

このように、superメソッドでスーパークラス側のメソッドを呼び出すこともできます。

initializeのオーバーライド

Rubyでは、コンストラクタであるinitializeメソッドもオーバーライドできます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

オーバーライドしたinitializeメソッドで、superメソッドに引数付きで呼び出しています。
このようにRubyでは、コンストラクタであるinitializeメソッドもオーバーライドできます。

superclassメソッド

Rubyのclassメソッドとして、superclassメソッドがあります。
superclassメソッドは、そのクラスのスーパークラス名を返却します。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

すべてのクラスはObjectクラスを継承していることが分かります。

is_a?メソッド

Rubyのインスタンスメソッドとして、is_a?メソッドがあります。

is_a?メソッドは、オブジェクトが指定されているクラスのインスタンスか、そのサブクラスのインスタンスである場合にtrueを返却します。

また、オブジェクトがモジュールをインクルードしたクラスか、そのサブクラスのインスタンスであった場合にもtrueを返却します。(このケースは今回説明しません)
上記以外の場合にfalseを返却します。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

SubClassはSuperClassを継承しており、SuperClassはObjectを継承しています。
そのため、puts subClass.is_a?(OtherClass)だけがfalseになります。

同じことを確認できるメソッドとして、kind_of?メソッドがあります。
実際のソースコードを見てみましょう。

実行結果は以下のようになります。

SE
確かに継承することでコードが整理されて読みやすくなっていますね。
PM
ソースコードを参考にして、ご自身でも書いてみてください。

Rubyの継承を正しく理解して使いこなそう

いかがでしたでしょうか。

Rubyでは、定義済みのクラスを継承して新しいクラスを作成できます。
継承元のクラスをスーパークラス(親クラス)、継承して作成したクラスをサブクラスといいます。

ぜひご自身でRubyのソースコードを書いて、理解を深めてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags