以下のようなインターフェイスがあったとしましょう。
このインターフェイスの目的は、クラスに「空を飛ぶ能力」を追加する
ものだと考えてください。
インターフェイスには、空を飛ぶための手段を与えるメソッド
howToFly() が定義されています。
ただし、このメソッドはまだ実装されてはいません。
つまり、具体的にどうやって空を飛ぶのかは未定です。
public interface Flying {
/** まだ実装されていない abstractメソッド */
abstract public void howToFly();
}
このインターフェイスを別の既存のクラス Horse にインプリメントしてみましょう。
馬に空を飛ぶ能力を与えて
Pegasus(ペガサス)という新しいクラスを定義します。
public class Pegasus extends Horse implements Flying {
/* インターフェイス Flyingの中のメッソドを実装する */
public void howToFly() {
System.out.println("I use my wings.");
}
}
今度はまた別のクラスに Flying をインプリメントします。
public class FlyingElephant extends Elephant implements Flying {
/* インターフェイス Flyingの中のメッソドを実装する */
public void howToFly() {
System.out.println("I use balloons.");
}
}
このように、インターフェイスを通じて共通の性質を持つ新しいクラスの グループを作ることができます。