こんにちは!ISAMU(@burlesca_isa)です!
今回の対象読者は
- javaのインターフェースについて知りたい方
javaのインターフェースとは
インターフェースとは公開すべき必要な操作の取り決めです。
インターフェース(interface)という言葉の意味は「境界面」です。
例えば、USBインターフェースはPCと外部の機器をつなぎます。
HDMIインターフェースはPCのやブルーレイデッキなどをつなげる境界です。
インターフェースの規格が合えばメーカーや機器の種類など関係なく
接続することが可能です。
インターフェース規格が合うことで、内部構造を自由に設計することが可能になります。
これらをプログラミングでも活用できるのがインターフェースです。
インターフェースを使用することによりプログラムの再利用性を高めることができます。
抽象度が高い概念がインターフェース
オブジェクト指向の考え方で、もっとも抽象的な概念をインターフェースとします。
例えばバスを抽象化すると車です。
車を抽象化すると乗り物です。
バス→車→乗り物
どこまで抽象化するかは作りたいシステムによりますが、
ここでは一番上位の概念を乗り物とします。
そして、一番上位の抽象概念の「乗り物」をインターフェースを作成します。
インターフェースとはインスタンスと呼び出しプログラムの境界です。
ここでは「乗り物」というインスタンスで呼び出しプログラムとの境界としています。
インターフェースで定義するもの
インターフェースは抽象概念なので、
「持っているものは分かるけど内容はわからない」ものを定義します。
例えば
乗り物という抽象概念は「動く」という動作を定義することができます。
ただ、「乗り物」は車や飛行機などに具体化することができますが、
動き方は飛行機であれば「空を飛ぶ」、車であれば「道路を走行する」と様々です。
なので、乗り物インターフェースには「動く」ということはできても「どのように動作する」かまでは定義することができません。
インターフェースは基本的にどんなメソッドを持っているかまでを記述します。
インターフェースの宣言
構文
アクセス修飾子 interface インターフェース名{ }
具体的に定義できるもの
抽象メソッド
インターフェースに定義するメソッドは基本的に抽象メソッドです。
抽象メソッドの定義方法は
public abstract 戻り値 メソッド名();
ですが、
この修飾子を使用しなくても自動的に付与されます。
抽象メソッドは処理ブロックを記述しません。
デフォルトメソッド
デフォルトメソッドは通常のメソッド(具象メソッド)を定義できます。
構文
[修飾子] default 戻り値 メソッド名(引数リスト){ 処理}
デフォルトメソッドはSE8から使用できるようになりました。
オブジェクト指向の考え方ではインターフェースは抽象的なものを定義するものなので、
使用する頻度はあまり高くありません。
staticメソッド
SE8からインターフェースにstaticメソッドを定義できるようになりました。
定数
インターフェースは基本的にはフィールドを持ちませんが、
定数の宣言は許されています。
構文
public static final 定数名;
インターフェースでは修飾子を使用しなくても自動的にpublic static finalが付与されます。
インターフェースを実装する
「インターフェースをクラスに実装する」といいます。
例えば、車クラスに乗り物インターフェースを実装するといいます。
構文
[修飾子] class クラス名 implements インターフェース名