クラスのようなものである。
インターフェースの形は以下のようになる。
interface インターフェース名{
型名 フィールド1= 式;
...
型名 フィールドm= 式;
戻り値の型 メソッド名1();
...
戻り値の型 メソッド名n();
}
フィールドはすべて(実質的に)public static final、つまり定数。メソッドはすべてpublic abstractと同じ。
interfaceはその実装クラスで実装して使う
class 実装クラス implements インターフェース名
{
}
実装クラス はinterfaceのフィールドとメソッドを受け継ぎ、メソッドはすべて定義しなければならない。
インターフェースのimplementsとは:
抽象クラスのメソッドをオーバーライドするのとほぼ同じ(別クラスに同じ名前で別機能のメソッドを持たせる)。
ただし、フィールドの値を変えることは不可。
複数のクラスを継承することはできないが
複数のinterfaceを実装することはできる。
class クラス名implements interface名,
interface名、・・・・interface名
抽象クラスとインターフェイス
類似点:
1)オブジェクトを作れない。
コンストラクターは書けるが、それ自身でオブジェクトは作れない
2)抽象クラスはサブクラスに、インターフェイスは実装クラスにメソッドの実装を要請する。
相違点:
1)インターフェイスはクラス階層のどのクラスにもくっ付くが、抽象クラスはクラス階層の一箇所に位置する。
2)抽象クラスは抽象メソッドが1以上。フィールドは定数でなくてもよい。インターフェイスは全てのメソッドが抽象メソッド、全てのフィールドが定数。
3)抽象クラスの抽象メソッドはpublicまたは protected。インターフェースのメソッドは全てabstract & public。
図Proo11_1_srcにプログラム例を示す。1から4行 インターフェースの定義。二つの抽象メソッドが書かれている。
5から16行 実装クラスProBook
フィールドは全てprivate。
10から12行 sbook定義されている。これはコンストラクタで使われている。
13から15行 displayが実装されている。
17から27行 実装クラスTextBook
ProBookとほぼ同じになっている。
以下にソースを二つ示す。
interface scratch { void sbook(String title, int page); void display(); } class ProBook implements scratch{ private String title;private int page, category; public ProBook(String title, int page, int category){ sbook(title,page);this.category=category; } public void sbook(String title, int page){ this.title=title;this.page=page; } public void display(){ System.out.println(" [ProBook: "+title+","+page+","+category+"]"); } } class TextBook implements scratch{ private String title;private int page,school; public TextBook(String title, int page, int school){ sbook(title,page);this.school=school; } public void sbook(String title, int page){ this.title=title;this.page=page; } public void display(){ System.out.println(" [TextBook: "+title+","+page+","+school+"]"); } } public class Proo11_1{ public static void main(String args[]){ ProBook a; TextBook b; a=new ProBook("Introduction to C++",300,5); b=new TextBook("Beginner's Java",400,3); a.display();b.display(); } } // [ProBook: Introduction to C++,300,5] // [TextBook: Beginner's Java,400,3]