今回はプログラミング言語Javaに関する、
interface (インタフェース) について書き溜めます。
インタフェースはオブジェクト指向の継承に関する概念なので
情報機科学初心者のマイルストーンとして残しておく。
概要
インタフェース(interface) とは?
共通のメソッドの抽象化
まず、簡潔に言い表すと、
インタフェースとは、継承関係等にない無関係のクラスに共通メソッドを持たす手段 です。
各クラスは、インタフェースを実装し、抽象メソッドの本体を記述していきます。
インタフェースには下記の特徴を持ちます。
- インタフェースのメソッドは形のみ定義し、本体は記述しない
- コンストラクタを持たないため、インスタンスは作れない
- フィールド変数は持てない
- クラス変数(定数)は持てる
- 各クラスは、カンマ(,)区切りで複数のインタフェースを実装できる
*各メソッドはabstractが省略されているため、interfaceを実装したクラスは
interface内の抽象メソッドを全てオーバライドする必要がある。
interface内の抽象メソッドを全てオーバライドする必要がある。
オーバライドについては過去記事「Java クラス オーバーライドとオーバーロード の違い」を参照されたい。
インタフェースを宣言する
interfaceを宣言する場合、classの部分にinterfaceと書く。
1 2 3 4 |
// public interface Drinkable { public boolean drink(); // 抽象メソッドのため本体は各クラスで実装する。 }</pre> |
インタフェースを実装する
interfaceを実装するには、継承のextendsではなくimplementsを使用する。
1 2 3 4 5 6 7 8 9 10 11 |
class MilkCoffee implements Drinkable { boolean drunk = false; String name; MilkCoffee(String name){ this.name = name; } public boolean drink(){ drunk = true; return drunk; } } |
interfaceを複数実装する場合、カンマ区切りで実装できる。
また、スーパークラスを継承しつつinterfaceを実装することも可能。
下記のようになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class MilkCoffee extends Coffee implements Drinkable, Printable { boolean drunk = false; String name; MilkCoffee(String name){ super(); this.name = name; } public boolean drink(){ drunk = true; return drunk; } public String print(){ return "This is Coffee"; } } |
インタフェースにおけるアクセス修飾子
インタフェースにもアクセス修飾子の宣言が可能である。
アクセス修飾子については過去記事「アクセス修飾子のまとめ(private、protected、public)」を参照されたい。
基本的なところだが、
頭にいれておきたい。
じゃあね〜〜〜〜。