[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends:00497] Re: Java プログラマーのための Perl 入門 ?
えんどうです。
> CLOSなら、「引数に与えたShapeの種類によりメソッドを振り分ける」
> という用途がありますが、Javaではこれはできません。
この「用途」という用語がどういう文脈で出てきたのかまだ良く分かりません。
私が主題にしていたのは Java ではなく、
「クロージャーが存在する言語では"Javaのメソッドオーバーロード"相当の
ことが動的なディスパッチで可能である」と言いたかったわけです。
> Javaのメソッドオーバーロード(静的なメソッド選択)の機能は、
> 「裏でコンパイラに別のメソッド名を付けてもらうこと」です。
>
> Javaのメソッドオーバーロードの用途は、
> 「メソッドの名前を色々考えなくてよくて嬉しいな」というものでしかなく、
> 「型情報によるディスパッチ機構」ではありません。
了解しました。
> | draw()をShapeの外に出した場合、メソッドオーバライドが
> | *素直には* 使えなくなる、ということを言いたかったのですが。
>
> http://www.javaopen.org/jfriends/mlarchive/msg02362.html
> えんどうさん wrote:
> | void draw(Point);
> | void draw(Line);
> | void draw(Curve);
> | void draw(Arc);
> |
> | こういうのではだめですか。
> ****************************************
>
> はい、だめです。決定的にだめです。
> CLOSならこれでできるわけですが、Javaではだめです。
> これでできると(今も)思っているのなら、えんどうさん、Javaのメソッド
> オーバーロードを誤解しています。
なぜ決定的にダメなのかが分かりません。もう少し実例を示していただけませんか?
「*素直には* 使えなくなる」と書いてあるところがミソでしょうか?
--
ENDO Yasuyuki <yasuyuki@xxxxxxxxxxxx>
http://www.javaopen.org/~yasuyuki/ (Persotal/Japanese Only)
http://www.javaopen.org/jfriends/ (Japanese Only)