1:クラス間の関係
様々なくランスを定義すると、クラス間に関係が生じる場合もあります。クラス間の関係を下記にまとめます。
「クラス間の関係」
・集約ー分解関係:全体と部分の関係。part-of関係ともいう。
・汎化ー特化関係:親子の上下関係
・スーバクラス、親クラス、基底クラス:汎化ー特化関係における上位クラス
・サブクラス、子クラス:ハンカー特化関係における下位クラス
・インヘリタンス、継承:上位クラスの構造を下位クラスが引き継ぐこと
・ポリモルフィズム、多相性:同じ名称のメソッドを出しても、オブジェクトごとに異なる動作を行うこと
※試験例:インヘリタンスとは、「基底クラスの性質を派生クラスに受け継がせること」
※試験例:汎化は「クラス間に共通する性質を抽出し、基底クラスを作る」こと
2:インヘリタンス(継承)
クラスに上下関係を作ると、上位クラスで定義した内容を自動的に下位クラスに引き継がせることができるようになります。上位クラスで定義したデータ項目やメソッドを自動的に下位クラスが引き継ぐことをインヘリタンス(継承)と言います。
インヘリタンスの考え方も、私たちは日常的によく使っています。例えば、「ランブータン」をご存知でしょうか。知らなくても、「フルーツの一種です」と言えば、だいたい納得できるはずです。フルーツという概念で定義されている「食物」、「なにかの実」、「甘そう」といった事柄が、自動的に「ランブータン」に当てはめられたからです。つまり、インヘリタンスを行ったわけです。あとは、「ランブータン」特有の特徴を聞けば、完全に納得できます。
このように、インヘリタンスが可能であると、いちいち最初から説明しなくても良くなりますから便利です。プログラムの場合も、全く同じです。下位クラスでは、上位クラスとの違いだけをプログラムすれば良いのです。これを差分プログラミングと言います。上位クラスで定義されているデータ項目やメソッドは自動的に下位クラスに引き継がれ、下位クラスでも利用できます。
4:オーバライドとポリモルフィズム
上位クラスからメソッドを引き継ぐ際に、上位クラスでの定義とは異なった動作にしたいこともあります。この場合、下位クラスで再定義(オーバライド、上書き)することも可能です。