[1897] オーバーライド時の共変、反変について
投稿者:lang
2015/02/21 14:30:58
”プログラミング言語を作る”内の8-3-5章にて
下の解説を読みました。
class ShapeArray{
Shape get(int index);
void set(int index, Shape shape);
};
class CircleArray extends ShapeArray{
Circle get(int index); ・・・①
void set(int index, Circle circle); ・・・②
};
①は戻りの値の型が共変なので問題無し。
②は引数の方が共変であるため実行時チェックが必要。
アップキャストは常に可能ですが、
ダウンキャスト時は実行時チェックが必要だと理解しています。
戻りの値の型が共変、引数の型が共変、
ともにダウンキャストとなる、という認識ですが、
なぜ、問題の有無の判断が変わってくるのでしょうか。
一般的な言語のオーバーライドの動作に関することで
本掲示板への質問が適切かどうか分かりませんが、
もしよろしければ細くいただけると助かります。