インスタンス生成・メソッド実行せずとも機能を受けつぐ方法
共通の動作があり、それをまとめる。
しかし、それは付属的な動作であり、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()とするだけ。