プログラミング応用a 第14回 『インタフェイス(interface )』 -00〜多重継承と単一継承

●今回は, interface という擬似的なクラスについて学習する。その前に,予備知識として
   ・多重継承
   ・単一継承
 について説明していく。



【クラスは概念を表す】
 クラスのソースプログラム上での役割は,『オブジェクトの設計図』である。もう少し柔らかく言うと,
  クラスは「概念(concept)」を表している。
と言える。今まで授業で扱ってきたクラスを例に取ると,
 例1) Personクラスは「人間」という概念を表していた。
 例2) RPGCharacter クラスは「ロールプレイングゲームに登場するキャラクター」という概念を表していた。
 例3) Dog クラスは「犬」という概念を表していた。
 例4) Car クラスは「自動車」という概念を表していた。
などである。

そして,オブジェクトは,各クラスが表している概念の具体例と言える。
 例1) Person p = new Person ( 20, 0, "Taro" ); // オブジェクトpは「人間」という概念の具体例で,Taroという名前の二十歳の男性




【継承の形態】
 今まで学習してきたとおり,継承は非常に強力な考え方である。
そこで, 下図のように
 ・ひとつのサブクラスが複数のスーパークラスを持つ
という継承の仕方ができるオブジェクト指向プログラミング言語もある(例: C++など)。
このように,複数のスーパークラスを持つ継承の仕方を『多重継承(multiple inheritance)』と呼ぶ。

上図のように,多重継承は手軽に複数の概念を合成したクラスを作ることができる。

一方,スーパークラスをひとつしか持てない継承の仕方を『単一継承(single inheritance)』と呼ぶ。
実は, Javaでは多重継承を許しておらず,単一継承しかすることができない

非常に便利そうな多重継承なのに,なぜ Javaでは多重継承を許していないのか。
実は,多重継承は便利で強力ではあるのだが,やっかいな問題が起こるのである。その多重継承の問題点を次に紹介する。