直接?ではないインターフェースのインプリメント
インターフェースを間接的に継承するようなコードを書いてみたら動いた。
public class Jisso { // インターフェース public interface Intf { public int getNum(); public void setNum( int num ); public void printNum(); } // インターフェースのデフォルト実装 public static abstract class DefaultImpl1 implements Intf { int num = 0; public int getNum() { return num; } public void setNum( int num ) { this.num = num; } } // インターフェースを実装したabstractクラスの継承 public static class ImpleTest1 extends DefaultImpl1 { public void printNum() { System.out.println( "num=" + getNum() ); } } // デフォルト実装その2(メソッドシグネチャはIntfにあわせてある) public static class DefaultImpl2 { int num = 0; public int getNum() { return num; } public void setNum( int num ) { this.num = num; } } // 継承+インターフェースのインプリメント public static class ImpleTest2 extends DefaultImpl2 implements Intf { public void printNum() { System.out.println( "num=" + getNum() ); } } public static void main(String[] args) { Intf test = null; int num = 0; test = new ImpleTest1(); test.setNum( 1 ); test.printNum(); num = test.getNum(); test = new ImpleTest2(); test.setNum( 2 ); test.printNum(); num = test.getNum(); } }
どちらも同じように動くのだけど、ImpleTest2の実装はなんだか気持ちが悪いなぁ・・・
ImpleTest2のような書き方に意味はあるんか?