Java Basic インターフェース・抽象クラスの作り方

イントロダクション

抽象クラスを使って見ようと思います。まずは抽象クラスってなに?と疑問に思う人もいると思うので簡単に説明しますと

抽象クラス

普通のクラスに抽象メソッドを持てるようにしたクラスです。何が違うのか?というと必ず子クラスを作る必要があり、このクラスは、newてきません。

どう使うんだ?と思う人もいるかもですが例えば、
抽象クラスのモンスタークラスを作ったとしましょう。

しかしモンスターの種類はたくさんあります。そして攻撃の方法も多岐にわたります。

こんな時「攻撃」メソッドを抽象メソッドにして子クラスのスライムクラスで、「攻撃」メソッドをオーバライドしてやればモンスターの攻撃でも、スライムの攻撃にすることができます。

下の動画は、抽象メソッドを持つインターフェイスクラスを使って、抽象メソッドのexecuteを実行するけど、処理内容が色々ある処理を実行しました。

やってみた!CommandIF(自作インターフェース)を作る

余計な音が入っています。

インターフェース・クラスの作成方法

/** インターフェースの作成 */
public interface A {
   // 抽象メソッドを定義します。
   public abstract void test01();
   // 上と同様
   public void test02();
   // 引数など書き方は普通のメソッドと一緒
   public String test03(int i);
}

抽象クラスの作成方法

/** 抽象クラスの作成 */
public abstract class A {
    // 抽象メソッドはインターフェースと同じ
    public abstract void test01();
    // 通常のメソッドの実装もOK
    public void test02() {
       System.out.println("Hello");
    }
    public A() {
       // コンストラクタ
    }
}

上の抽象クラスは、親クラスとして定義して、こクラスで似た様な処理
なんども同じ処理を呼び出したいときに使用します。

/** 子クラスサンプル */
public B extends A {
    // 親クラスの抽象メソッドをオーバーライドする必要がある
  @Override
    public void test01() {
     // 親クラスのメソッドを呼び出す
        test02();
    }
    // そのほかのメソッドなど
}

上記の様に親子関係を作成し、「A家」でtest01()の伝統を引き継いでいく・・・
みたいな感じです。
GOFのデザインパターン」などを見ると参考になると思います。

インターフェースと抽象クラスの違い

インタフェースは、実体のあるメソッドを持てない。抽象クラスは実体のあるメソッドを持てる。

/** 抽象メソッドは実体がない */
public abstract virtualMethod();

/** 実体のあるメソッド */
public void realMethod() {
    System.out.println("Real method")l;
}

ポリモーフィズム

ポリモーフィズムは、一つのメソッドでいろいろなデータ型を使えるようにするということです。
具体的には、メソッドの引数にインタフェースを宣言して作成してみましょう。

public void porimo(List<? extends Object> list) {
    /// 何かしらの処理
}

自作のCommandIF(インタフェース)を使用したポリモーフィズムの実行動画があります。

関連ページ一覧

<Java Basic>

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜「四則計算」
  3. Java Basic Level3 〜About String class〜「Stringクラス」
  4. Java Basic Level 4〜Boolean〜「TrueとFalse」
  5. Java Basic Level 5〜If Statement〜「IF文の書き方など」
  6. Java Basic Summary from Level1 to 5「Level1〜5までの複合技」
  7. Java Basic Level 6 〜Traning of If statement〜「IF文の練習」
  8. Java Basic Level8 〜How to use for statement〜「For文の使い方」
  9. Java Basic Level 8.5 〜Array〜「配列について」
  10. Java Basic Level 10 〜While statement 〜「While文について」
  11. Java Basic Swing〜オブジェクト指向〜「オブジェクト指向の考え方1」
  12. Java Basic Swing Level 2〜オブジェクト指向2〜「同じく、考え方2」

<クラスの種類>

http://zenryokuservice.com/wp/2018/05/14/java-basic-%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A8%E3%81%AF-inputsreamreader%E3%80%9Cstep2_1%E3%80%9C/

<インターフェース>

http://zenryokuservice.com/wp/2018/06/01/java-basic-%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%83%BB%E6%8A%BD%E8%B1%A1%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9/

<実装サンプル>

http://zenryokuservice.com/wp/2018/06/16/java-bassic-%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%80%9C%E3%82%B5%E3%83%B3%E3%83%97%E3%83%ABrpgmain%E3%82%AF%E3%83%A9%E3%82%B9%E3%80%9C/

http://zenryokuservice.com/wp/2018/05/20/java-basic-%E3%83%9F%E3%83%8B%E3%82%B2%E3%83%BC%E3%83%A0%E4%BD%9C%E6%88%90-%E3%80%9C%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%82%B2%E3%83%BC%E3%83%A0%E3%80%9C/

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す