Por que a substituição do método java permite ter tipos de retorno covariantes, mas não parâmetros covariantes?
Por exemplo, eu tenho uma classe base Processor com um método que retorna um Object e usa Object como parâmetro. Eu quero estendê-lo e criar um StringProcessor que retornará String e terá String como parâmetro. No entanto, a digitação covariante é permitida apenas com valor de retorno, mas não com parâmetro. Qual o motivo de tais limitações?
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;
}
}