- PR -

interface のメソッドは、なぜ protected にできないのでしょうか?

投稿者投稿内容
Jun
大ベテラン
会議室デビュー日: 2003/08/25
投稿数: 141
投稿日時: 2003-08-26 18:11
よつもとさんの意見ごもっともと思います.
そもそもinterface以外で多重継承ができるならinterfaceは今のままでいいのです
しかしそのときはinterface自身が必要なくなるような気がします.

骨格抽象クラスというものがどういうものかいまいちよくわからないのですが
いますぐにeffective java を読めない人のためにも概略説明していただけると
ありがたいのですが
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-08-26 18:15
引用:

そもそも、implementsって継承に含まれるのでしょうか?
私的な解釈だとクラスの場合、extendsは拡張という
名前のとおり継承という動作であると思います。



OOPの3本柱である継承には、実装の継承と仕様に継承の2つが含まれていると考えています。この考えに基づけば、extendsは実装の継承、implementsは仕様の継承に相当します。
ぽん
大ベテラン
会議室デビュー日: 2003/05/13
投稿数: 157
投稿日時: 2003-08-26 18:34
引用:

Junさんの書き込み (2003-08-26 18:11) より

そもそもinterface以外で多重継承ができるならinterfaceは今のままでいいのです
しかしそのときはinterface自身が必要なくなるような気がします.


無くならないと思いますよ。
Interfaceは多重継承のためのものでは無いですし、
ClassとInterfaceでは役割が違いますから。

「interface 役割」でぐぐってみて下さい。

[ メッセージ編集済み 編集者: ぽん 編集日時 2003-10-24 13:28 ]
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 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/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)