この記事では、オブジェクト指向「継承」とは何かをわかりやすく解説します。
どうも!インストラクターの佐野です。
前回の記事では「クラス」「メソッドやインスタンスの関係」を学びました。
今回はクラスと同じくオブジェクト指向の基本的な概念「継承」について解説します。
以前の記事も合わせてご確認下さい。
【第一回】
【第二回】
- 継承はクラス定義の共通部分をまとめたクラスを作っておく仕組み
- 継承を用いればコードの再利用やメソッドのオーバーライドが可能
- 継承はプログラミングの効率向上が期待できる手段
なお、収入UPや将来性を見据え、IT企業に転職したいと考えている人は、ぜひ「侍エンジニア」をお試しください。
侍エンジニアでは現役エンジニアと学習コーチの2名体制で学習をサポート。20〜50代と年齢に関わらず、希望企業への内定を見据え、スキル習得から就業活動の進め方まで一貫して学べます。
未経験からIT企業に転職したい人は、ぜひ一度お試しください。
\ 給付金で受講料が最大80%OFF /
継承とは?
定義
まずはWikipediaの解説を読んでみましょう!
継承(けいしょう、inheritance:インヘリタンス)とはオブジェクト指向を構成する概念の一つである。
あるオブジェクトが他のオブジェクトの特性を引き継ぐ場合、両者の間に「継承関係」があると言われる。
一般的に、BがAを継承する場合、B is a A. (BはAの一種である)という意味的な関係(Is-a関係)が成り立つ。
従って、同じふるまいを持つからと言って、意味的に無関係なクラス間に継承関係を持たせるのは適切でない場合が多い。
ちょっと難しいですね!
オブジェクト指向は抽象的な概念なので、具体的に例をあげて解説した方がわかりやすいでしょう。
具体的にいうと、「継承」とは、クラス定義の共通部分を別クラスにまとめる仕組みのことをいいます。
継承はクラス定義の共通部分を別クラスにまとめる仕組み
継承は、既存のクラスから、新しく作ったクラスに「変数定義」や「メソッド」などを引き継ぐことです。
継承される既存のクラスを「スーパークラス(親クラス)」、継承した新しく作ったクラスを「サブクラス」といいます。
しかし、そういわれてもスーパクラスを引き継ぐことでどんなメリットがあるのか、なぜ継承を使う必要があるのかがよくわからないでしょう。
継承にはどんなメリットがあるのか、なぜ継承を使うのかを解説していきます。
なお、IT企業への転職や副業での収入獲得に向け、どの言語が自分にあうのか、どう学習を進めればいいのかなどがあいまいな人は「プログラミング学習プラン診断」をお試しください。
かかる時間は1分ほど。4つの質問に答えるだけで、あなたにあう言語や学習プランを診断してもらえます。
効率よくスキル習得したい人は、ぜひ一度お試しください。
\ 4つの質問に答えるだけ /
なぜ継承を使うのか?
実は、継承を使わずにプログラミングを行うことは可能ですし、使わなければプログラミングができないといったわけではありません。
継承を使わなくても問題はなさそうに思えます。
それなのに、なぜ継承を使うのでしょうか?
それは継承が、「コードの再利用性」や「拡張性」を高めるための有効な手段となるからです。
プログラムが大規模になってくると、コードが見づらくなったり、読みづらくなったりします。
その原因の1つは、同じような機能をもつ重複したコードを書いてしまうからです。
重複したコードを書くことによって勘違いやミスが増え、思わぬバグやトラブルを起こしてしまう可能性があり、メンテンスが難しくなります。
また、メンテナンスが難しくなることによって、「機能の追加」や「改善」が難しくなり拡張性が下がってしまいます。
効率よく少ないコードでプログラミングしないと、開発がどんどん難しくなり、コードを書くプログラマーも苦しくなってくるのです。
これはパッと聞いてもイメージが湧かないと思いますので、どのように継承を使うのか具体例をもとに解説していきます。
なお、ITの仕事に興味はあるものの、どの職種が自分にあうのかわからない人もいますよね。そんな人は「ITキャリア診断」をお試しください。
かかる時間はたったの1分。5つの質問に答えるだけで、自分にあうIT職種を診断してもらえます。
自身に適した職種が知りたい人は、手軽に試してみると良いですよ。
\ 5つの質問に答えるだけ /
どのように継承を使うのか?
コードの再利用
継承を用いる場合は、「骨組み」となるクラスを1つ作り、その1つのクラスを継承するのが一般的です。
具体例では、「RPGのキャラクター」があります。
「初期のキャラクター」を「スーパークラス」として、継承して「戦士クラス」とか「魔法使いクラス」などを作るイメージです。
そうすることで、戦士であれば剣を使う部分だけ、魔法使いであれば魔法を使う部分だけ、つまり必要最低限のコードを追加するだけでプログラミングができてしまうのです。
メソッドのオーバーライド
継承したサブクラスでは、スーパークラスのメソッドを使うことができます。
新しく追加して機能を追加することもできますが、実はスーパークラスのメソッドを「上書き」することもできます。
スーパクラスのメソッドをサブクラスで上書きすることを「オーバーライド」といいます。
このオーバーライドが継承を使う上でもっとも重要な機能となります。
具体例をあげると、オーバーライドはRPGのキャラクターが行う特定のアクションを上書きする場合によく使います。
攻撃する処理を書いたメソッドをオーバーライドし、「忍者は通常攻撃で一定確率で即死攻撃」、「白魔道士は攻撃で回復を行う」といった具合で上書きするようなイメージです。
これも「一定確率で即死」「回復する」などの違う部分だけをプログラミングするだけで済みますし、同じメソッドを使っても実行するクラスによって違う動作を行うようにできます。
こちらの方が効率よくプログラミングすることができますね!
なお、IT企業への転職や副業での収入獲得を見据え、独学でスキル習得できるか不安な人は「侍エンジニア」をお試しください。
侍エンジニアでは、現役エンジニアと学習コーチの2名体制で学習をサポートしてもらえます。
「受講生の学習完了率98%」「累計受講者数4万5,000名以上」という実績からも、侍エンジニアなら未経験からでも挫折なく転職や副業収入の獲得が実現できますよ。
\ 給付金で受講料が最大80%OFF /
まとめ
継承は
- コードの重複を減らしてコードの再利用性を高める
- メソッドを追加したり、オーバライドすることで自由に拡張する
の2点を実現し、プログライミングの効率をあげる手段です。
オブジェクト指向は実際にプログラミングしてみないと便利さを実感できないので、理解するには時間がかかります。
しかし、クラスと継承で共通していることは2つとも「プログラミングの効率をあげること」を目的としています。
オブジェクト指向は「プログラミングの効率をあげる考え方の1つ」だと思っていただければいいでしょう。
次回はオブジェクト指向の3つ目の概念「ポリモーフィズム」について説明していく予定です。
はたして、ポリモーフィズムとはどんな風にプログラミングの効率をあげるものなのでしょうか。
どうぞ、お楽しみに!