[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)