[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: 『Java Report』?の記事




前橋です。

遠藤さんの読書会の記事を読んで、思い出したのでちょっとだけ。
読書会にはちょっと参加できそうにないですし。

# 件の Java Reportの記事は、まだ読んでません。(^^;

岸田さん:
>> AbstractクラスとInterfaceの使い分けに関する記事です。Interfaceでは、
>> 既に定義して使われている、あるInterfaceの定義にメソッドを追加した場合
>> このInterface定義を実装していたクラスは全部エラーとなってしまう。
>> #このエラーは、コンパイルエラーというより実行時エラーの意味だったと
>> #思いますが、詳しくは覚えてません。
>>
>実行時エラーのような気がします。

ええと、この場合、安定した「API」を設計する話ですから、クラ
スライブラリをクラスファイルで提供するとして、それを使用する
APにどう影響を与えるか、ということですよね。

「コンパイル時エラー」以前に、そもそもコンパイルしないことが
前提なんじゃないかと思ったんですけど...

# 完璧に勘違いしてますか? 私。

コンパイルするのなら、implementsしていながら全メソッドを実装
していないクラスは、コンパイルエラーになると思うのですけれど。

実行時エラーだとしたら、ロード・リンク時にはねてくれるのが親
切だと思いますが...

>> この問題は、Abstractクラスを使うことによって避けられる。あるときAbstract
>> クラスにメソッドを追加しても、Abstractクラスを継承していたクラスには
>> エラーとならない。
>> #これは本当かどうか未確認です。
>>
>追加したメソッドを Abstract にしないで空のメソッドでも書いておけばいい
>ということなのかもしれませんね。

でしょうね。

>> 多重継承の問題がないのであれば、InterfaceよりもAbstractクラスを使う方が
>> betterという結論を出していました。
>>
>なんとなく納得してしまうのですが、これは、たぶんコードさんは反対する
>お話かもと思いました。

interface も abstractクラスも使わず、Objectで受けて、メソッ
ドの名前だけ決めて、リフレクション使って無理矢理呼び出す...
これなら、その名前のメソッドがなければ何もしないようにすれば
いいし、名前が衝突しない限り、多重継承の問題も発生しない。完璧!!

...冗談ですよ。もちろん :-)

私はやっぱり interfaceの方が正しいような気がします。

------------------------------------------------------------
  前橋 和弥                             maebashi@xxxxxxxxxx
  中部ソフトエンジニアリング(株)
    〒450 名古屋市中村区名駅4-10-25(名駅IMAIビル 5F)
    Tel:(052)583-4511(代) 内線 252 Fax:(052)583-4566
------------------------------------------------------------