たとえば、私はObjectを返し、Objectをパラメータとして取るメソッドを持つProcessor基本クラスを持っています。私はそれを拡張し、Stringを返し、Stringをパラメータとして取るStringProcessorを作成したいと思います。ただし、 共変タイプは、戻り値でのみ許可されますが、パラメーターでは許可されません。そのような制限の理由は何ですか?Javaメソッドのオーバーライドで、共変な戻り値型を持つことができますが、共変量のパラメータを持てないのはなぜですか?
class Processor {
Object process (Object input) {
//create a copy of input, modify it and return it
return copy;
}
}
class StringProcessor extends Processor {
@Override
String process (String input) { // permitted for parameter. why?
//create a copy of input string, modify it and return it
return copy;
}
}