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

questionAnswers(8)

yourAnswerToTheQuestion