- - PR -
interface のメソッドは、なぜ protected にできないのでしょうか?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-08-26 18:11
よつもとさんの意見ごもっともと思います.
そもそもinterface以外で多重継承ができるならinterfaceは今のままでいいのです しかしそのときはinterface自身が必要なくなるような気がします. 骨格抽象クラスというものがどういうものかいまいちよくわからないのですが いますぐにeffective java を読めない人のためにも概略説明していただけると ありがたいのですが | ||||
|
投稿日時: 2003-08-26 18:15
OOPの3本柱である継承には、実装の継承と仕様に継承の2つが含まれていると考えています。この考えに基づけば、extendsは実装の継承、implementsは仕様の継承に相当します。 | ||||
|
投稿日時: 2003-08-26 18:34
無くならないと思いますよ。 Interfaceは多重継承のためのものでは無いですし、 ClassとInterfaceでは役割が違いますから。 「interface 役割」でぐぐってみて下さい。 [ メッセージ編集済み 編集者: ぽん 編集日時 2003-10-24 13:28 ] | ||||
|
投稿日時: 2003-08-26 20:35
Wataです。
骨格実装抽象クラスのわかり易い例は、Listに対する、AbstractList, Mapに対するAbstractMap、Actionに対するAbstractActionなどです。 これらの抽象クラスはListなどのインターフェイスの実装クラスを定義するための労力を 最小化し、なおかつ重要な部分に対しては実装をさらにサブクラスに任せています。 このようなインターフェイスと骨格実装クラスの対が用意されていれば、 クラスの多重継承の必要性は非常に低くなります。 もし、インターフェイスAとその骨格実装のAbstractA、 インターフェイスBとその骨格実装のAbstractBがあるときに A, B両方のインターフェイスを実装したければ、A,Bの両方をimplementsし、 AbstractAまたはAbstractBのどちらかを継承し、 もう一方を内部クラスで実装して転送メソッドを記述すればよいだけです。 ほむらさんがC++でやっていたのもこのスタイルですね。 要するに継承よりもコンポジションを使うわけですが、これにより多重継承の頭の痛い問題を回避しつつ、既存のルールで全て上手くやる事ができます。 #だから、もちろん骨格実装クラスの多重継承も不要です。 骨格実装クラスも、コンポジションもEffective Javaに説明されている事項です。 #というかこの書き込み自体ほとんど受け売りです。 ところで、もしインターフェイスにprotectedなメソッドが定義されているとしたら、 いったい誰がそのメソッドを呼ぶのですか? | ||||
|
投稿日時: 2003-08-27 11:11
ども、ほむらです。
個人的にももうすこし煮詰めてみたいので 新しくスレッド立ててみました。 ----------- abstract classとinterfaceの違い、 骨格実装クラス?な話題でご利用いただければ幸いです タイトル:class or interface? URL: http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5941&forum=12&0 |