Confusão polimorfismo Java
A pergunta abaixo é do livro Java SCJP5 de Kathy Sierra e Bert Bates. Dado um método declarado como:
public static <E extends Number> List<E> process(List<E> nums)
Um programador deseja usar o método como este:
// INSERT DECLARATIONS HERE
output = process(input);
Quais pares de declarações podem ser colocados em // INSERIR DECLARAÇÕES AQUI para permitir a compilação do código? (Escolha todas as opções aplicáveis.)
UMA
ArrayList<Integer> input = null;
ArrayList<Integer> output = null;
B.
ArrayList<Integer> input = null;
List<Integer> output = null;
C.
ArrayList<Integer> input = null;
List<Number> output = null;
D.
List<Number> input = null;
ArrayList<Integer> output = null;
E.
List<Number> input = null;
List<Number> output = null;
F.
List<Integer> input = null;
List<Integer> output = null;
G. Nenhuma das acima
s respostas corretas fornecidas são: B, E, F e a explicação no livro indica:
"O tipo de retorno é definitivamente declarado como List, NOT ArrayList, então A, D estão errados. ......"
Isto é o que eu não entendo ... por que o tipo de retorno DEVE ser apenas de lista e não de ArrayList? Assim como o argumento pode ser ArrayList, por que o tipo de retorno não pode também ser arrayList?
Obrigad