Conflito de nome ao substituir o método da classe genérica

Estou tentando entender o erro de conflito de nome que recebo com o seguinte código:

import java.util.*;
import javax.swing.*;

class Foo<R extends Number> {
    public void doSomething(Number n, Map<String, JComponent> comps) {
    }
}

class Bar extends Foo {
    public void doSomething(Number n, Map<String, JComponent> comps) {
    }
}

Mensagem de erro:

error: name clash:doSomething(Number,Map<String,JComponent>) noBar edoSomething(Number,Map<String,JComponent>) noFoo têm o mesmo apagamento, mas nenhum substitui o outro

Eu sei que posso corrigi-lo removendo o tipo genérico deFooou alterando oBar declaração paraclass Bar extends Foo<Integer>; o que eu quero saber é por que esse erro ocorre no caso específico, mas desaparece se eu remover ocomps parâmetro de cada método. Eu fiz algumas leituras sobretipo apagamento, mas ainda me parece que ambos os métodos devem ter o mesmo apagamento com ou sem genéricos e, portanto, ser uma substituição válida em ambos os casos. (Observe que ainda nem usei o parâmetro genérico em nenhum lugar, e é por isso que estou tão surpreso.)

Sei que adicionei tipos genéricos às classes pai antes, mas só recebi avisos sobre as subclasses, não erros. Alguém pode explicar esse cenário?

questionAnswers(1)

yourAnswerToTheQuestion