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

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つ目の概念「ポリモーフィズム」について説明していく予定です。

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

どうぞ、お楽しみに!


33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーでWEBエンジニアをやられている濱口直行さん。33歳で、プログラミングを学び始め、約半年という短い期間で独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


最短でプログラミングを習得したい方へ

元々ITリテラシーのある方やプログラムの学び方がわかっている方は独学で習得することも可能でしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「もう挫折したくない」
「本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい。」
「自分だけのカリキュラムで効率的に勉強したい」

そんな方はお気軽に侍エンジニア塾までご相談ください。

弊社では、

  • プログラミング基礎学習
  • オリジナルアプリ開発
  • 仕事獲得

までをひと通り学習できます。

まずは無料体験レッスンで、弊社のコンサルタントと一緒にあなた専用の学習方法やカリキュラムを考えてみませんか?

挫折しない学び方や、通常1000時間以上かかる学習時間を1/3にする方法などより具体的なアドバイスもさせていただいています。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta1

学習者インタビュー

人気記事セレクション

エンジニア転職希望者必見

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

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】
プログラミング講師@佐野裕史
自分でプログラミングができない人のために情報を発信しています。
お気軽にフォローください。