- - PR -
クラスの継承、インターフェースの実装の関係がこれで良いのか分かりません・・
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-01-17 11:58
下記のような5つのクラスがあるのですが、
クラスの継承、インターフェースの実装の関係がこれで良いのか分かりません。 Superクラスは多重継承になっていないのでしょうか? public interface Interface extends java.何かのインターフェース{ public void printValue(); } public abstract class Super implements Interface{ } public class Sub1 extends Super{ /* (非 Javadoc) * @see Interface#printValue() */ public void printValue() { // TODO 自動生成されたメソッド・スタブ System.out.println(getClass().getName()); } } public class Sub2 extends Super implements Interface{ /* (非 Javadoc) * @see Interface#printValue() */ public void printValue() { // TODO 自動生成されたメソッド・スタブ System.out.println(getClass().getName()); } } public class Main { public static void main(String[] args) { Super[] classes = new Super[2]; classes[0] = new Sub1(); classes[1] = new Sub2(); for(int i=0; i<classes.length; i++){ classes[i].printValue(); } } } | ||||
|
投稿日時: 2006-01-17 12:40
関係が良いか悪いかは何をもって「良い」というのかわかりませんが、これはこれでアリですよ。多重継承にもなっていません。 Super implements Interface なのに Sub2 extends Super implements Interface なのも、冗長ですが「悪」ではありません。 | ||||
|
投稿日時: 2006-01-17 12:48
これは、全然ありですね。
インターフェイスは直接でない限り、 何回でも同じものが実装できますし、好きなだけ実装できます。 Class#getInterfaces()を実行したときに、 直接実装したものしか返さないため、 Sub.class.getInterfaces(); Sub2.class.getInterfaces(); では、戻り値が違います。 クラスのインターフェイスを取得するフレームワークがあるとして、 そのフレームワークが上記の様な取得を行っている場合、 インターフェイスを適切に渡すために、Sub2のような実装を行うケースもありえます。 | ||||
|
投稿日時: 2006-01-17 13:36
びしばしさん、かつのりさん早速のご回答ありがとうございました。
お二人とも「全然あり」とのご回答で安心しました。 Javaとは・・のような本やサイトにはこのような例が載っておらず、 近くに相談できる人もいないので本当に助かりました。 みなさん、このような少し応用というか実践(?)のようなプログラムの 書き方ってどうやって習得するのでしょうか? もしよかったら、教えてください。 | ||||
|
投稿日時: 2006-01-17 20:40
仕事でもオープンソースのプロダクトを頻繁に使用しますが、
・メソッドの仕様を知りたいとき ・不可解なバグやエラーが発生したとき ・フレームワークを拡張したいとき など、様々なケースでコードを読むようにしています。 オープンソースのコードは、比較的勉強になりますよ。 | ||||
|
投稿日時: 2006-01-17 21:16
直接の回答ではないですが、以前、私が質問した、
「java.util.Collection のメソッドがサブインターフェースの List にもあるのはなぜ?」 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7753&forum=12 の (2) と似たような疑問だと思いました。ご参考までに。 | ||||
|
投稿日時: 2006-01-18 17:02
かつのりさん、unibonさんご回答ありがとうございました。
かつのりさん> そういえば、前にjavaのソースを読んで勉強していた時期がありました。 やっぱり人のコードを読んで、形を真似するみたいなのが一番なんですかね。 また何かターゲットを見つけて、コードを読んでみようと思います。 2度もご回答いただき、ありがとうございました。 unibonさん> リンク先拝見しました。 私の質問したケースと似ているような・・・んー。 でも、javaがやっているならなおさらOKのような妙な自信がでてきました(笑) ありがとうございます。 |
1