Java Basic 〜インターフェースの扱い方2〜

インターフェースの扱い方

java.util.Listやjava.util.Mapのインターフェースを使用することは多いと思います

今回は、自作したインターフェースを使用してみようと思います。

==<今回のやりたいこと>===
自作したインターフェースを使用して、起動するクラスを切り替えて実行しようというものです。

具体的には、インターフェースCommandIFを作成し、以下の2つのクラスに実装、メインメソッドで標準入力を受けて入力した文字列によって2つのクラスのうちどちらを起動するか選択できるようにする。

  1. HelloCommand
  2. ReadyCommand

起動した時の動画です。

インターフェースサンプルを作る

  1. まずはインターフェースクラスを作成します。
    下のように、インターフェースを定義

    public interface CommandIF {
    }
  2. インターフェースに、実装クラスで起動するメソッドを定義します。
    ここで作成するメソッドは、実装(implements)したクラスで必ず定義しなくてはいけないメソッドになります。

    public interface CommandIF {
    /** コマンドを実行する */
    public void execute();
    }

    完成したコードはGithubにあります。

  3. インターフェースを実装する
    今回は下のように2つのクラスに実装(implements)しました。

<メインメソッドで実行する>

public class Lv3_1_RefactorLv2_Main {
    /** コマンドリスト */
    private static  Map<String, CommandIF> cmdMap;
    public static void main(String[] args) {
        // コマンドの用意
        cmdMap = new HashMap<String, CommandIF>();
        cmdMap.put("hello", new HelloCommand());
        cmdMap.put("ready", new ReadyCommand());
        // 標準入力
        Scanner input = new Scanner(System.in);

        while(true) {
            System.out.println("入力してください: ");
            String inStr = input.nextLine();
            if ("bye".equals(inStr)) {
                System.out.println("Good Bye");
                break;
            }

            CommandIF cmd = cmdMap.get(inStr);
            if (cmd != null) {
                cmd.execute();
            } else {
                System.out.println("コマンドが登録されていません。: " + inStr);
            }
        }
    }
}

上のメインメソッドでは、以下のような処理を行っています。

  1. HashMapのインスタンスをMap型の変数に代入
  2. マップのキーに"hello"、値に「HelloCommand」クラスのインスタンス
  3. 同様にキーに"ready"、値に「ReaddyCommand」クラスのインスタンス
  4. 無限ループを開始
  5. 入力を促し、標準入力を受ける
  6. マップから「HelloCommand」か「ReaddyCommand」もしくはnullを取得する(キーに該当するものがないときはNULLが返ってくる)
  7. 「HelloCommand」か「ReaddyCommand」のexecute()メソッドを実行

「HelloCommand」と「ReaddyCommand」クラスには「CommandIF」をimplementsしていますので必ず「execute()」メソッドが存在し、実行することができます。
このように、インターフェースを実装したクラスはそのインターフェース型として使用することができますので、CommandIFを実装(implements)したクラスは全て「execute()」メソッドがあり、CommandIF型の変数に代入、execute()を実行できるというわけです。

余談ですが、このインsターフェースを実装した他のサンプルもありますので、これも紹介します(動画ですが。。。)。

<応用編>

今回はそんなところで。。。

でわでわ。。。

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜