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;
    }
}

questionAnswers(2)

yourAnswerToTheQuestion