インタフェースについて
ファイルは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を使用します。 戻る |