27.
インターフェイス
インターフェイスとは
インターフェースは、プログラムを実装しないメソッドをもつファイルです。抽象クラスと同じ考え方ですが、仕様や目的が少し違います。
抽象クラスとインターフェイスの違い
抽象クラスとインターフェイスは似ていますが、それぞれ違いがあります。
項目 | 抽象クラス | インターフェイス |
---|---|---|
目的 | 継承関係でメソッドをオーバーライド | クラス仕様で型定義する設計書 |
キーワード | abstract | interface |
継承/実装 | extends | implements |
多複数クラスの引き継ぎ | できない | できる |
インスタンス化 | できない | できない |
複数クラスの多重承継
通常のサブクラスからスーパークラスは1つしかクラスを継承できません。 Javaでは多重継承はサポートしていませんが、インターフェイスを使うと多重継承のような複数のクラスを引き継ぐことは可能です。
インターフェイスのルール
インターフェイスの定義
インターフェイスはクラス名の前に「interface」をつけます。アクセス修飾子は「public」か「デフォルト」にします。
インターフェイスの抽象メソッド
抽象メソッドの定義は抽象クラスと同様に宣言しますが、「abstract」キーワードは省略します。
インターフェイスの実装
インターフェイスを実装するには、「implements」キーワードを使い、複数のクラスを実装できます。
インターフェイスの命名規則
インターフェイスだとわかるように命名規則をつけるルールです。人によっていろいろな命名規則を利用するためケースバイケースですが、インターフェイスと認識できるようにしましょう。
接頭語「 I 」
インターフェイス名の先頭に、Interfaceの「 I 」をつけるパターンです。
接尾語「Interface」
インターフェイス名に、「Interface」をつけるパターンです。
接尾語「able」
インターフェイス名に「able」を組み合わせるパターンです。
実装側に接尾語「Impl」
インターフェイス名はそのままで、実装側のクラス名に「Impl」つけるパターンです。
インターフェイスの利用
インターフェイスファイルの作成
ICharacter.javaファイルを作成し、interfaceを選択します。

ICharacterインターフェイスが作成できました。
ICharacter.java
Itemクラス作成
Itemクラスを作成し、プロパティ、コンストラクタ、アクセサメソッドなどを追加します。
抽象メソッドの定義
ICharacterインターフェイスに抽象メソッドを追加します。
ICharacter.java
メソッドの実装
equip() の実装
コンパイルエラーになるので、未実装のメソッドを実装します。

サブクラスに、equip() メソッドが自動挿入されました。
ICharacter.java
Itemを使った実装
equip() メソッドでItemインスタンスを使った処理します。
ICharacter.java
メインプログラム
キャラクターがアイテムを装備するメインプログラムEquipAppを作成します。
EquipApp.java
メインプログラムを実行して、attackPower、defencePowerを確認してみましょう。
結果
演習
問題1
インターフェイスの定義で正しいのはどれですか?
- public IPerson { }
- public abstract IPerson { }
- public interface IPerson { }
- public static IPerson { }
問題2
クラス「Person」で、インターフェイス「IPerson」の実装で正しいのはどれですか?
- public IPerson implements Person { }
- public IPerson extends Person { }
- public Person implements IPerson { }
- public Person extends IPerson { }
問題3
インターフェイス「IPerson」に talk(String message) メソッドを宣言し、「Person」クラスで実装してみましょう。
問題4
JavaBeansの説明で「間違っている」のはどれですか?
- 引数なしのコンストラクタを定義する
- setter/getterを利用する
- 1次元のデータ列に変換(シリアライズ)を利用する
- データベース処理と画面用処理を1ファイルにまとめる