オブジェクト指向「継承」とは?わかりやすく解説してみた

eyecatch_template
佐野裕史
書いた人 佐野裕史

どうも!インストラクターの佐野です。

前回の記事では「クラス」「メソッドやインスタンスの関係」を学びました。

今回はクラスと同じくオブジェクト指向の基本的な概念「継承」について解説します。

なお、この記事はオブジェクト指向についてのシリーズ第四回目になります。

以前の記事も合わせてご確認下さい。

【第一回】


【第二回】

【第三回】

継承とは?

shutterstock_412434487

定義

まずはWikipediaの解説を読んでみましょう!

継承(けいしょう、inheritance:インヘリタンス)とはオブジェクト指向を構成する概念の一つである。
あるオブジェクトが他のオブジェクトの特性を引き継ぐ場合、両者の間に「継承関係」があると言われる。
一般的に、BがAを継承する場合、B is a A. (BはAの一種である)という意味的な関係(Is-a関係)が成り立つ。
従って、同じふるまいを持つからと言って、意味的に無関係なクラス間に継承関係を持たせるのは適切でない場合が多い。

ちょっと難しいですね!

オブジェクト指向は抽象的な概念なので、具体的に例をあげて解説した方がわかりやすいでしょう。

具体的にいうと、「継承」とは、クラス定義の共通部分を別クラスにまとめる仕組みのことをいいます。

継承はクラス定義の共通部分を別クラスにまとめる仕組み

継承は、既存のクラスから、新しく作ったクラスに「変数定義」「メソッド」などを引き継ぐことです。

継承される既存のクラスを「スーパークラス(親クラス)」、継承した新しく作ったクラスを「サブクラス」といいます。

しかし、そういわれてもスーパクラスを引き継ぐことでどんなメリットがあるのか、なぜ継承を使う必要があるのかがよくわからないでしょう。

継承にはどんなメリットがあるのか、なぜ継承を使うのかを解説していきます。

なぜ継承を使うのか?

shutterstock_325661450
実は、継承を使わずにプログラミングを行うことは可能ですし、使わなければプログラミングができないといったわけではありません。

継承を使わなくても問題はなさそうに思えます。

それなのに、なぜ継承を使うのでしょうか?

それは継承が、「コードの再利用性」「拡張性」を高めるための有効な手段となるからです。

プログラムが大規模になってくると、コードが見づらくなったり、読みづらくなったりします。

その原因の1つは、同じような機能をもつ重複したコードを書いてしまうからです。

重複したコードを書くことによって勘違いやミスが増え、思わぬバグやトラブルを起こしてしまう可能性があり、メンテンスが難しくなります。

また、メンテナンスが難しくなることによって、「機能の追加」「改善」が難しくなり拡張性が下がってしまいます。

効率よく少ないコードでプログラミングしないと、開発がどんどん難しくなり、コードを書くプログラマーも苦しくなってくるのです。

これはパッと聞いてもイメージが湧かないと思いますので、どのように継承を使うのか具体例をもとに解説していきます。

どのように継承を使うのか?

コードの再利用

shutterstock_316398173
継承を用いる場合は、「骨組み」となるクラスを1つ作り、その1つのクラスを継承するのが一般的です。

具体例では、「RPGのキャラクター」があります。

「初期のキャラクター」「スーパークラス」として、継承して「戦士クラス」とか「魔法使いクラス」などを作るイメージです。

そうすることで、戦士であれば剣を使う部分だけ、魔法使いであれば魔法を使う部分だけ、つまり必要最低限のコードを追加するだけでプログラミングができてしまうのです。

メソッドのオーバーライド

shutterstock_307269245
継承したサブクラスでは、スーパークラスのメソッドを使うことができます。

新しく追加して機能を追加することもできますが、実はスーパークラスのメソッドを「上書き」することもできます。

スーパクラスのメソッドをサブクラスで上書きすることを「オーバーライド」といいます。

このオーバーライドが継承を使う上でもっとも重要な機能となります。

具体例をあげると、オーバーライドはRPGのキャラクターが行う特定のアクションを上書きする場合によく使います。

攻撃する処理を書いたメソッドをオーバーライドし、「忍者は通常攻撃で一定確率で即死攻撃」「白魔道士は攻撃で回復を行う」といった具合で上書きするようなイメージです。

これも「一定確率で即死」「回復する」などの違う部分だけをプログラミングするだけで済みますし、同じメソッドを使っても実行するクラスによって違う動作を行うようにできます。

こちらの方が効率よくプログラミングすることができますね!

まとめ

継承は

  • コードの重複を減らしてコードの再利用性を高める
  • メソッドを追加したり、オーバライドすることで自由に拡張する

の2点を実現し、プログライミングの効率をあげる手段です。

オブジェクト指向は実際にプログラミングしてみないと便利さを実感できないので、理解するには時間がかかります。

しかし、クラスと継承で共通していることは2つとも「プログラミングの効率をあげること」を目的としています。

オブジェクト指向は「プログラミングの効率をあげる考え方の1つ」だと思っていただければいいでしょう。

次回はオブジェクト指向の3つ目の概念「ポリモーフィズム」について説明していく予定です。

はたして、ポリモーフィズムとはどんな風にプログラミングの効率をあげるものなのでしょうか。

どうぞ、お楽しみに!

未経験者でも安心の徹底サポート!まずは完全無料の体験レッスン!

「プログラミングに興味があるけど未経験だし、、、」とお悩みの方はご安心ください。

  • 24時間質問し放題
  • あなただけのオーダーメイドカリキュラムで学習の効率化
  • 仕事獲得方法からオリジナルアプリ開発方法

侍エンジニア塾では徹底したサポートによる「オーダーメイドカリキュラム」を作成しています。

まずは無料体験レッスンで、「挫折しない学習方法」や「あなただけの学習ロードマップ」を知り、学習の効率化をしましょう。独学の難点である「オリジナルアプリの作り方やエラーの対処法」についてもアドバイスさせていただきます。

詳しいサービス内容は、下記よりご参照ください。

cta_mtm1

プログラミング学習者必見

専属講師に質問し放題、レッスンし放題、最短1ヶ月でフリーランスエンジニア
プログラミング学習カリキュラム無料公開中
Ruby学習カリキュラム無料公開中
 1記事最大11,000円!テックライター募集


LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

佐野裕史

佐野裕史

侍エンジニア塾インストラクター。
主に技術担当をしています。

【経歴】
力仕事、接客業、営業職など様々な業界を経てIT業界に参入。
IT未経験からスタートし、1ヶ月で仕事獲得に奇跡的に成功。
1年半後にフリーランスに転身。

Web開発を主に行っており、得意とするのはRails、Ruby。
【技術スキル】
Rails、Ruby、Swift、Java(Android)、JavaScript

【趣味、趣向】
麻雀
MTG(マジックザギャザリング)
ダーツ、卓球、野球、ボウリングなどの球技

【Facebookページ】
https://www.facebook.com/hiroshi.sano.7
【Twitter】
プログラミング講師@佐野裕史
自分でプログラミングができない人のために情報を発信しています。
お気軽にフォローください。