Na przykład mam klasę bazową procesora z metodą, która zwraca obiekt i bierze obiekt jako parametr. Chcę go rozszerzyć i utworzyć StringProcessor, który zwróci ciąg i przyjmie ciąg jako parametr. Jednak typowanie kowariantne jest dozwolone tylko z wartością zwracaną, ale nie z parametrem. Jaki jest powód takich ograniczeń?Dlaczego w nadpisywaniu metody java można mieć kowariantne typy zwracania, ale nie parametry kowariantne?
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;
}
}