インターフェース
ポリモーフィズムを実現させるにはいくつかの方法があります。ここでは、インターフェースについてみてみましょう。インターフェースは、メンバー変数や抽象メソッドで構成されます。インターフェースは「interface」キーワードを使って定義します。
インターフェース定義の書式 |
---|
interface インターフェース名{ 抽象メソッド定義… } |
インターフェースはインスタンスを生成できません。別のクラスで実装し、抽象メソッド等をオーバーライドして利用することができるようになります。 実装はクラスの継承と違い、カンマ区切りで複数指定することができます。
インターフェース実装の書式1 |
---|
class クラス名 implements インターフェース名, インターフェース名…{ 各種定義… 抽象メソッドのオーバーライド } |
インターフェース実装の書式2 |
---|
class サブクラス名 extends スーパークラス名 emplements インターフェース名{ 各種定義… 抽象メソッドのオーバーライド } |
○ ファイル
次のようにファイルを作成してください。
ファイル名 | IDrip.java |
---|
○ プログラム
インターフェースを作成しましょう。今回はドリップを表すインターフェースを作成します。このインターフェースは、主に飲み物に実装させる予定です。実装したクラスでは飲み物の注ぎ方を定義させます。
IDrip.java
- interface IDrip{
- String drip();
- String dripWithMilk();
- }
○ クラス図
○ 解説
2、3行目では、抽象メソッドを宣言しています。メソッドの仕様は決まっているので、このメソッドを使用するにはオーバーライドして処理を実装する必要があります。
○ ファイル
次のようにファイルを作成してください。
ファイル名 | Coffee.java |
---|
○ プログラム
次に、ドリップインターフェースを実装したコーヒークラスを作成しましょう。
Coffee.java
- public class Coffee implements IDrip{
- //フィールド
- private String name = "コーヒー";
- //注ぐメソッドをオーバーライド
- public String drip(){
- return this.name;
- }
- //ミルクと一緒にそそぐメソッドをオーバーライド
- public String dripWithMilk(){
- return "ミルク" + this.name + "(微糖)";
- }
- }
○ クラス図
○ 解説
6~8行目では、IDripインターフェースのdripメソッドをオーバーライドしています。このメソッドはフィールドに設定されている飲み物を返します。今回はコーヒーが注がれるイメージとして文字列を返しています。
11~13行目では、IDripインターフェースのdripWithMilkメソッドをオーバーライドしています。このメソッドはミルクとコーヒーを返すことでミルクコーヒーを注ぎます。
○ ファイル
次のようにファイルを作成してください。
ファイル名 | InterfaceTest.java |
---|
○ プログラム
では次にCoffeeクラスを利用するプログラムを作成しましょう。次のように記述してください。
InterfaceTest.java
- public class InterfaceTest{
- public static void main(String[] args){
- //コーヒーオブジェクトを生成
- Coffee coffee = new Coffee();
- //コーヒーを注いでみる
- System.out.println("drip:" + coffee.drip());
- //ミルクも一緒に注いでみる
- System.out.println("dripWithMilk:" + coffee.dripWithMilk());
- }
- }
○ コンパイルと実行
C:¥work>javac InterfaceTest.java
C:¥work>java InterfaceTest
drip:コーヒー
dripWithMilk:ミルクコーヒー(微糖)
C:¥work>
○ 解説
4行目では、コーヒーオブジェクトを生成しています。そして、7行目と10行目でオーバーライドしたメソッドを呼び出しています。
今回のようにインターフェースを実装したオブジェクトは1つだけ利用してもあまり意味がありません。複数のオブジェクトで実装させることで効果が出てきます。次の節でその効果を確認してみましょう。