インタフェースについて

ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin Expander等)を使って解凍して下さい。

インタフェースとは・・・

インタフェースには、クラスと同じ様に変数やメソッドが定義出来ます。
但し、インタフェースで定義した変数は必ずfinal変数(定数)となり、メソッドは必ず抽象メソッドとなって処理を記述出来ません。
又コンストラクタを定義出来ません。
基本的にインタフェースとは、クラスの役割を示す物で、具体的な方法を決める物ではありません。
インタフェースは抽象クラスと同じ様にオブジェクトを生成出来ないので、他のクラスに実装させて使用します。
実装させたクラスでインタフェース内のメソッドをオーバライドして処理を定義します。
クラスは、複数のクラスを継承出来ませんが、変数や配列の型としての使用は出来ます。
インタフェースの定義は以下の通りです。

interface インタフェース名{
        型 変数名 = 式;
        戻り値の型 メソッド名(引数リスト);
}

インタフェースの特徴

  • interfaceで定義
  • 変数はfinal変数に(要初期化)・・・public static final変数
  • メソッドは抽象メソッドに(処理の記述不可)・・・public abstractメソッド
  • コンストラクタ無し
  • オブジェクトの生成不可(クラスに実装)

インタフェースの実装時は以下の様にクラスを定義します。

class クラス名 implements インタフェース名{
        :
}

インタフェース実装済のクラスでは、インタフェースで定義しているメソッドを定義しなくては活けません。

インタフェースの多重実装

上記の通り、Javaでは2つ以上のクラスを継承する多重継承は出来ません。
しかし、インタフェースを使用する事で多重継承の仕組みの一部を実現出来ます。
クラスは2つ以上のインタフェースを実装出来ます。

class クラス名 implements インタフェース名1, ・・・, インタフェース名2{
        :
}

インタフェースの継承

インタフェースは、他のインタフェースを継承出来ます。
インタフェースの継承時は、クラスの継承と同じくextendsを使用します。
継承元のインタフェースをスーパーインタフェースと言い、継承先のインタフェースをサブインタフェースと言います。
Javaではクラスの継承を行う場合、1つのクラスだけという制約が有りますが、インタフェースの継承の場合は其の様な制約は有りません。
複数のインタフェースを継承させられます。
此処で、インタフェースの実装と継承の違いに注意して下さい。
インタフェースを継承出来るのは、インタフェースだけです。
クラスにインタフェースを継承させられませんが、インタフェースの実装はさせられます。

  • 継承するインタフェース間で同じ名前の変数を定義している場合は「インタフェース名.変数名」で指定
  • 継承するインタフェース間で、同じシグネチャのメソッドが定義されている時は、戻り値の型も同じでなければならない
interface インタフェース名1 extends インタフェース名2, ・・・, インタフェース名3{
        型 変数名 = 式;
        戻り値の型 メソッド名(引数リスト);
}

複数のインタフェースの継承時は、次の事に注意しなければなりません。

  • 継承するスーパーインタフェース間で同じ名前の変数は定義不能
  • 継承するスーパーインタフェース間で同じ名前のメソッドは定義可能だが、其の時、戻り値が同じでなければならない
スーパーインタフェースとサブインタフェース間で同じ名前の変数が定義されている時は、サブインタフェースの変数が優先
インタフェースと実装済のクラスで同じ名前の変数が定義されている時は、クラスの変数が優先

インタフェースの継承時はextendsを使用しますが、インタフェースの実装時はimplementsを使用します。

ソース ダウンロード
Fruits02.java Temp10.zip
Fruits03.java
Product01.java
Product02.java

戻る