K.Maebashi's BBS

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

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

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

[1903] Re:オーバーライド時の共変、反変について
投稿者:(ぱ)こと管理人
2015/02/25 03:35:46

>Javaだとこの場合ははオーバライドにはならないで、オーバーロード、 >引数型が違う同名の別メソッドが増えただけと見なすことでガードするという実装なんですね。 こう言っては何なのですが、たぶんこれはJavaを「買いかぶりすぎ」だと思うのです。 引数については、反変はOK、共変はNG、 戻り値については、共変はNG、反変はOK なのですが、 JDK1.4までのJavaでは、 引数については、型が違えばオーバーロード、 戻り値については、型が違えばコンパイルエラー でした。戻り値については共変は許されるべきなのに、古いJavaではコンパイルエラーに してしまっていたのです。 Javaでは、JDK1.5(Tiger)において、「共変戻り値」が許されるようになりました。 後になってこれを許すようになったということは、 当初は、共変とか反変とかそんなことはJavaの作者はあんまりまじめに考えていなくて、 後になって、共変戻り値はOKにすることができたけれど、反変引数は、既にそれを オーバーロードという機能で使ってしまっていたためにOKにできなかったのではないか、 と思います。 メソッドオーバーロードがすごく便利だから反変引数を捨ててでもそちらを取った、 というのは言語設計者の選択肢として理解できますが(私はオーバーロードが便利だと 思わないのでその選択肢は取りませんが)、 本来使えるべき共変戻り値を当初エラーにしてしまっていた(しかも1.5でそれを 撤回した)というのは、あまりこう、ちゃんと考えた結果には見えないんですよねえ。
[この投稿を含むスレッドを表示] [この投稿を削除]