知らないと大変
Javaの命令に「interface(インターフェース)」があります。たまにソースコードを読んでいるとみかけますが、これを理解していないとソースコードを読み取れなくなることがあります。そのために、じっくりと「interface(インターフェース)」を紹介します。
メソッド定義を強制させる
インターフェースはクラスに定義しなければいけないメソッドを宣言する命令です。また、定数を定義することもできます。プログラム例をみてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
package jp.ayax.object; public class Main { public static void main(String[] args) { Wide_tv mytv = new Wide_tv(); mytv.channel_up(); } } interface Remote_Controller{ void on(); void off(); } interface Tv { int FROM_CHANNEL = 1; void channel_up(); void channel_down(); } class Wide_tv implements Remote_Controller,Tv { @Override public void channel_up() { System.out.println(FROM_CHANNEL); } @Override public void channel_down() { } @Override public void on() { } @Override public void off() { } } |
9行目でインターフェースRemote_Controller、14行目でinterface Tv を定義しています。
9 |
interface Remote_Controller{ |
14 |
interface Tv { |
そして、それぞれのインターフェースの中で定義が必要なメソッドの宣言をしています。また、定数の定義も行っています。
10 11 |
void on(); void off(); |
15 16 17 |
int FROM_CHANNEL = 1; void channel_up(); void channel_down(); |
クラスでインターフェースを利用するには、19行目のようにクラスの定義で「implements <インターフェース名>,<インターフェース名>・・ 」と記述します。これによりこのクラスでは、インターフェースで宣言されたメソッドを定義しなければいけません。
19 |
class Wide_tv implements Remote_Controller,Tv { |
また、22行目のようにインターフェースで定義した定数を利用できるようになります。
22 |
System.out.println(FROM_CHANNEL); |
何が違うのか?
思い出された人もいるかもしれません。第2回 クラスを考える 「厳格なabstract」です。「abstract」は宣言したメソッドの定義を強制するものでした。「interface」も宣言したメソッドを定義しなければいけません。この点は同じです。違いは、「abstract」は継承するのでクラスに1つですが、「interface」は複数記述することができます。
使い分けは、「abstract」がクラス構造のテンプレートとして利用し、それ以外は「interface」を使うという感じです。
ここまでが一般的な「interface」の説明ですが、さらに重要なことがありますので、次に紹介します。