継承(インヘリタンス) |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
継承(インヘリタンス)
クラスの内容を別のクラスに引き継ぐ機能。
すでに作ってあるクラスを元にして、
新しいクラスを作ることが出来る。
最初から作らないでいいので過去の資産を
活用できる。
インヘリタンスとも言う。英語で「相続」の意味。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
継承の呼び方
元になるクラスを親クラス。
継承するクラスを子クラスと言う。
他にもいろいろな呼び方がある。
どれもよく使うから覚えておくこと。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
|
クラスの継承:クラスのいろいろな呼び方 |
|
元になるクラス |
継承するクラス |
親クラス |
子クラス |
基本クラス |
派生クラス |
スーパークラス |
サブクラス |
その他にも、
ベースクラス、
基底クラス、など |
その他にも、
継承クラス、など |
|
|
表の行が対の呼び方になっています |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
プログラミングではこの作り方を、
「差分」だけを追加して作るところから、
差分プログラミングと言う。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
継承の基本構成
新しいクラス(子クラス)に
継承したいクラスの名前と、追加する内容を書く。
これで、新しいクラス(子クラス)は
親と子の両方の設計内容を持ったクラスになる。
2枚で一つの設計図というイメージ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
継承の使い方 |
|
1、オブジェクトの内容を考える |
2、クラスを設計する |
3、インスタンスを生成する |
4、インスタンスを設定して使う |
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
1、オブジェクトの内容を考える
例:継承を使ってトラックを作る。
トラックはどんな物か考えてみる。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
追加が必要な機能(フィールドやメソッド)を考える
トラックは、「一般的な自動車」にどんな機能が付いたものか?
・コンテナメソッド
荷物を積んだり降ろしたりする。
・積載量フィールド
コンテナに荷物をどれだけ積んだか記録する。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
2、クラスを設計する
考えた内容でクラスの設計をする。
今回は新しく「トラッククラス」を作った。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
3、インスタンスを生成する
作ったクラスでインスタンスを作る。
この際は子クラスをインスタンス化するだけでいい。
これで、親クラスの機能も持ったトラックが出来た。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
4、インスタンスを設定して使う
使う人は、親クラスの機能とか
子クラスの機能とか意識しないで使える。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
クラスの継承は何段階でもできる。
見てきた例のようにして継承を繰り返せば、
たくさんの設計図の内容を継承できる。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
そして、同じクラスを親にして
複数の派生したクラスを作ることもできる。
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
画像クリックで別ウィンドウに拡大表示します。 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
親クラスを書き換える時は注意。
親クラスを変更すると子クラスが親クラスから
引き継いでいる部分も同時に変わる。
継承してる全ての子クラスに影響が出るので
注意して変更すること。
みんなで1枚の親設計図を見にいってるイメージ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
別項目になっています。こちらからご覧下さい。
|
|
|
|
別項目になっています。こちらからご覧下さい。
|
|
別項目になっています。こちらからご覧下さい。
|
|
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
継承の問題点
継承の仕方によって複雑化する。そして、問題を引き起こす可能性がある。
継承を使いこなすのは難しいが最初から複雑に考える必要は無い。
複雑なことをしないでもプログラムは十分作れる。
まずは単純なことから始めて小さなことを積み重ねて行くこと。
今回はクラスの継承がどんなものか全体像を理解すること。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
|
継承(インヘリタンス)のまとめ |
子クラスは親クラスを継承することで、親クラスの設計を引き継ぐことができる。(差分プログラミング) |
オーバーロード(再定義)とオーバーライド(多重定義)で、
多態性(ポリモーフィズム)を実現している |
クラスの継承の仕方には、単純継承と多重継承がある |
|
|
|
|
 |
|
 |
|
|
 |
|
 |
|
オブジェクト指向の利点 |
|
利点 |
内容 |
柔軟性 |
物の組み合わせを変えることで、様々なシステムの設計に対応できる。 |
再利用性 |
一度作った物を別のシステムに再利用できる。 |
応用性 |
様々なものに当てはめて設計できる。
物体だけじゃなく事象や計画などに適用して考えることも出来る。 |
独立性 |
クラスごとに部品化して設計し、機能・役割を分担できる。 |
分離性 |
部品化し、内部処理をブラックボックス化することで、他に影響を与えずに交換や追加・変更しやすい構造にできる。 |
安全性 |
外部からのアクセスを制限にすることで、安全な構造に設計できる。 |
効率性 |
クラスごとに担当者を分け、作業を分担することで平行作業することができる。 |
・・・ |
・・・ |
|
|
|
|
|
 |
|
 |
|
|