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

[jfriends] Re: [jfriends] abstractクラスの方が有効な場合




岸田です。

Shin さん wrote:
> お久しぶりです.Javaじゃない仕事が忙しくて読書会等参加するパワーがな
> くて申し訳ないです.
> # 横浜なら...実はServletBOFにでてみようと思っとりますが.

おひさしぶりです。実は Shin さんが読書会に参加してくださることをちょっと
期待してたのですが…。

> In article <199906161736.CAA05620@xxxxxxxxxx>
> Toru Takahashi wrote:
> >AbstractクラスとInterfaceの使い分けに関する記事です。Interfaceでは、
> >既に定義して使われている、あるInterfaceの定義にメソッドを追加した場合
> >このInterface定義を実装していたクラスは全部エラーとなってしまう。
> >#このエラーは、コンパイルエラーというより実行時エラーの意味だったと
> >#思いますが、詳しくは覚えてません。
> >
> >例えば、java.awt.LayoutManagerインタフェースにメソッドを追加したかった
> >が、その場合LayoutManagerを実装しているクラスがエラーとなってしまうので
> >LayoutManager2という新しいインタフェースを定義した。
> >この問題は、Abstractクラスを使うことによって避けられる。あるときAbstract
> >クラスにメソッドを追加しても、Abstractクラスを継承していたクラスには
> >エラーとならない。
> >#これは本当かどうか未確認です。
> >
> >多重継承の問題がないのであれば、InterfaceよりもAbstractクラスを使う方が
> >betterという結論を出していました。
> >
> >この記事は、確か"Durable API"という連載のもので、安定したAPIを設計する
> >テーマに沿っています。今回は、一度定義したAPIを変更する場合、Interface
> >かAbstractクラスかどちらがよいかという話題です。
> 
> 最初はそんなものなのかなって思ってましたが、これってinterfaceを継承
> すればいいだけじゃないです?って上のメモに既に書いてありますが、
> LayoutManager2なりの拡張された新しいinterfaceを用意するほうが正しい
> というか.
> 「abstractクラスを使うことによって避けられる」と言っているのが、何を避
> けようとしているのかいまいち見えてきませんね.
> 

単純な考えですけど、ドキュメントを見たとき、レイアウトマネージャが二種
類あるのはなんだか混乱します。
#冗談ですが、今度どんどん、LayoutManager3, LayoutManger4 なんて出たら
#たまらないです。
要するに、『一度公開した API を変えたくないし、追加もしたくない時』と
いうテーマなのだと思いました。

結局、読んでないのでよく分からないので、元記事をよく読ませてもらって
から考えたいと思います。

岸田ゆき枝
yukie@xxxxxxxxxx