K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]


新規投稿 | 開設者ホームページへ戻る | ヘルプ


[1903] Re:オーバーライド時の共変、反変について
返信


投稿者:(ぱ)こと管理人
2015/02/25 03:35:46

Link:
>Javaだとこの場合ははオーバライドにはならないで、オーバーロード、
>引数型が違う同名の別メソッドが増えただけと見なすことでガードするという実装なんですね。

こう言っては何なのですが、たぶんこれはJavaを「買いかぶりすぎ」だと思うのです。

引数については、反変はOK、共変はNG、
戻り値については、共変はNG、反変はOK

なのですが、

JDK1.4までのJavaでは、

引数については、型が違えばオーバーロード、
戻り値については、型が違えばコンパイルエラー

でした。戻り値については共変は許されるべきなのに、古いJavaではコンパイルエラーに
してしまっていたのです。

Javaでは、JDK1.5(Tiger)において、「共変戻り値」が許されるようになりました。

後になってこれを許すようになったということは、
当初は、共変とか反変とかそんなことはJavaの作者はあんまりまじめに考えていなくて、
後になって、共変戻り値はOKにすることができたけれど、反変引数は、既にそれを
オーバーロードという機能で使ってしまっていたためにOKにできなかったのではないか、
と思います。
メソッドオーバーロードがすごく便利だから反変引数を捨ててでもそちらを取った、
というのは言語設計者の選択肢として理解できますが(私はオーバーロードが便利だと
思わないのでその選択肢は取りませんが)、
本来使えるべき共変戻り値を当初エラーにしてしまっていた(しかも1.5でそれを
撤回した)というのは、あまりこう、ちゃんと考えた結果には見えないんですよねえ。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[ より新しい投稿] [ より古い投稿]