インターフェイスも抽象クラスと同じく、それだけでは成り立たない「不完全なクラス」と言えます。
抽象クラスとの違いは、フィールドには定数、メソッドは抽象メソッドのみしか定義できない点です。
抽象クラスの場合は、抽象メソッドの他に通常のメソッドや変数も定義できましたが、インターフェイスの場合は、それらを定義することができないため、
宣言だけの中身が空っぽなクラス、とも言えます。
下記はインターフェイスを使用したサンプルコードです。
public class impSample{
public static void main(String[] args){
Dollar dollar;
dollar = new Dollar();
En en;
en = new En();
dollar.addMoney(100);
en.addMoney(10000);
dollar.show();
en.show();
}
}
interface Money{
void show();
}
class Dollar implements Money{
private int moneySum = 0;
Dollar(){
System.out.println("Dollarクラスのインスタンスが作成されました。");
}
public void addMoney(int m){
moneySum += m;
}
public void show(){
System.out.println("現在の所持金は" + moneySum + "ドルです。");
}
}
class En implements Money{
private int moneySum = 0;
En(){
System.out.println("Enクラスのインスタンスが作成されました。");
}
public void addMoney(int m){
moneySum += m;
}
public void show(){
System.out.println("現在の所持金は" + moneySum + "円です。");
}
}
【実行結果】
Dollarクラスのインスタンスが作成されました。
Enクラスのインスタンスが作成されました。
現在の所持金は100ドルです。
現在の所持金は10000円です。
上記サンプルはMoneyインターフェイスをDollarクラス、Enクラスでそれぞれ継承し、お金についてDollarクラスはドル単位で、Enクラスは円単位で管理しています。
まずは、Moneyインターフェイスについて見ていきます。
interface Money{
void show();
}
インターフェイスを宣言するには
interfaceキーワードを指定します。
Moneyインターフェイスは抽象メソッドであるshow()メソッドを宣言しています。
抽象クラスで抽象メソッドを宣言するとき先頭にabstractキーワードを付加する必要がありましたが、インターフェイスの場合はその必要はありません。
何もキーワードをつけなくても、abstractキーワードが付加したことと同じ意味になります。
次に、クラスにMoneyインターフェイスを実装します。
class Dollar implements Money{
private int moneySum = 0;
Dollar(){
System.out.println("Dollarクラスのインスタンスが作成されました。");
}
public void addMoney(int m){
moneySum += m;
}
public void show(){
System.out.println("現在の所持金は" + moneySum + "ドルです。");
}
}
クラスにインターフェイスを実装するには
implementsキーワードを指定します。
インターフェイスを実装したクラスを作成するためには、必ずインターフェイスの全てのメソッドを定義する必要があります。
試しにshow()メソッドの部分をコメント化してコンパイルしてみてください。
下記のようなコンパイルエラーを確認できるかと思います。
【コンパイルエラー】
impSample.java:12: シンボルを解決できません。
シンボル: メソッド show ()
場所 : Dollar の クラス
dollar.show();
^
impSample.java:21: Dollar は abstract でなく、Money 内の abstract メソッド show(
) をオーバーライドしません。
class Dollar implements Money{
^
エラー 2 個
インターフェイスを使用する理由も抽象クラスと同じく、わかりやすくて簡潔なソースコードを記述をすることを主な目的としています。
更に、インターフェイスを使用することで、プログラムを書く人に、
プログラム設計者の設計の意図するとおりにプログラムを書いてもらうよう誘導することができるようにもなります。