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();
    }
}