トップページ > コンテンツ > プログラミング入門 > Java入門 > 継承とインタフェース

javaは単一継承のみをサポートしており、
class NewClass extends BaseClass {
}
の形で継承を行うことができる。
extendsを行うとクラスで保持しているデータ構造もメソッドも継承される。

全て単一継承で事が済めば簡単だが、複数のクラスを継承したい場合が存在する。
その際に多重継承を許してしまうと、クラスの関係が煩雑化したり、
複数クラスで同じ名称のメソッド等を所持していた場合等に問題化することがあるため、
extendsでは複数のクラスを継承できない。

そこで、別の方法で仮想的に多重継承を実現することになるが、
その際に出てくるのがインタフェースとなる。
インタフェースではデータ構造を継承することはできないが、
メソッド等の共有が可能となる。
そのため厳密には継承というよりは実装(implements)に近い。
interface BaseInterface {
}
class NewClass implements BaseInterface {
}
の形でベースとなるインタフェースと実装するクラスを用意する。

インタフェースでの実装はimplementsしたクラスに完全に依存するので、
実装部分の共有はできない。
そこで、共通部分をコンポーネント(抽象クラス)として定義、
共通する実装部分をコンポジットとして用意し、
コンポーネントから間接的にコンポジットを呼び出して
実装部分を利用する方法がある。
…字で書いても分かりにくいので表すと、
interface Component1 {
   public void method1();
}
public class Composite1 implements Component1 {
   public void method1() {
     //実装内容
   }
}
public UseClass implements Component1 {
    UseClass sample;
    sample.method1(); 
    //呼び出す。形はComponent1のmethod呼び出しだが、実装はCompositeに任せている。
}
のような形にする。
尚、中身の無いインタフェースのことをマーカーインタフェースという(関連を参照こと)。
実装の共有については抽象クラスという方法もあるので参照したい(関連を参照のこと)。


関連:

最終更新:2011年05月07日 19:09