Java インターフェイス
interface(規約)は、クラスがどのようなメソッドを持っているのかを定義する設計書。
クラスとは違い、具体的な処理内容を記述せず、メソッドの引数や戻り値だけを定義する。
アクセス修飾子 interface インターフェイス名()
実装してほしいメソッド定数を定義
cat,human -interface- animal
animalクラスをインプリメントしたcat,cryはanimalクラスが定義したメソッドを必ず使用する必要がある。
また、インターフェイスはnewできない
インターフェイスの作成
animalインターフェイスを作成しインプリメント先としてcat,humanクラスを作成します
アニマルインターフェイスには、jump,cryメソッドを定義します。
抽象と違ってインターフェイス側でメソッド中身は定義することはできません。
//アニマルインターフェイスにjump,cryメソッドを定義、animalインターフェイスをインプリメントしたcat,humanクラスは //animalインターフェイスが定義したメソッドを必ず使用する。抽象と違ってインターフェイス側でメソッド中身は定義できない /** * アニマルインターフェイス * @author owner * */ interface Animal{ /** * ジャンプする */ void jump(); /** * 泣く */ void cry(); }
次に、humanクラスはanimalインターフェイスをインプリメントし、cry,jump,imaginationメソッドを作成します。
インプリメント先として、animalインターフェイスで定義したcry,jumpメソッドを必ず作成しなければならなく、
humanだけのメソッドとしてimagiantionを作成します。振る舞いとして想像したと30cm飛んだ、えーんを出力させます
//humanクラスはanimalクラスをインプリメントし、インプリメント先としてcry,jumpメソッドを必ず作成し //humanだけのメソッドとしてimagiantionを作成。想像したと30cm飛んだ、えーんを出力 class Human implements Animal { /** * 想像した */ public void imagination() { System.out.println("想像した"); } /** * ジャンプ */ public void jump() { System.out.println("30cm飛んだ"); } /** * 泣く */ public void cry() { System.out.println("えーん"); } }
catクラスはanimalインターフェイスをインプリメントしcry,jumpメソッドを必ず作成し、振る舞いとして1m飛ぶとにゃーを出力させます
//catクラスはアニマルクラスをインプリメントし、インプリメント先としてcry,jumpメソッドを必ず作成し、1m飛ぶとにゃーを出力 class Cat implements Animal { /** * ジャンプ */ public void jump() { System.out.println("1m飛んだ"); } /** * 泣く */ public void cry() { System.out.println("にゃー"); } }
関係図
クラス/インターフェイス | 実装関係 | メソッド | 説明 | 継承関係 |
---|---|---|---|---|
animalインターフェイス | インターフェイス | cry | 定義しない | 実装元 |
jump | 定義しない | 実装元 | ||
humanクラス | インプリメント | imagination | 想像した | 実装先 |
jump | 30cm飛んだ | animalのjumpをオーバーライド | ||
cry | えーん | animalのcryをオーバーライド | ||
catクラス | インプリメント | jump | 1m飛んだ | animalのjumpをオーバーライド |
cry | にゃー | animalのcryをオーバーライド |
Mainクラス
public class Mainexe { public static void main(String[] args) { //mainクラスはhuman,catクラスをnewしてhuman,cat,objを作成 Human human = new Human(); Cat cat = new Cat(); //catクラスのcryメソッドを実行 cat.cry(); human.cry(); human.jump(); cat.jump(); human.imagination(); } }