Memorandums?

This blog is written about technical-discoveries and daily-events.

インスタンス生成・メソッド実行せずとも機能を受けつぐ方法

共通の動作があり、それをまとめる。
しかし、それは付属的な動作であり、extendsするにはもったいない。
(Baseクラスを継承する必要があるため、継承できない)
だからといって、インスタンス生成したり、staticメソッドでも呼び出すのは面倒。
こんな時に役に立つのがInterface。
extendsよりもimplementsのほうが良い理由は、

  • 親とするほどの機能・性質を持たない
  • implementsならば、複数の実装が可能
なためです。
コールバックに似ています。


インターフェース。

F.java
public interface F {}

インターフェース実装時に機能が実装されるようにするクラス(親玉)。

Main.java
public class Main {
     public Main() {
          if (this instanceof F) {
             //必要な処理を記述する
             System.out.println("Execute!");  
          }
     }
}

利用クラス。

User.java
public class User extends Main implements F {
     public User() {
          //スーパークラスのコンストラクタ呼び出し
          super();
     }
}


実行クラス。

Execute.java
public class Execute {
     public static void main(String[] args) {
          new User();
     }
}


これでOK。
Mainコンストラクタに書かれた処理をする時は、
Mainコンストラクタを継承し、インターフェースを実装すれば良い
継承するのはBaseクラスの時がベストで、
どっちみちBaseクラスなら継承するため、その時に、super()とするだけ。