Duvida com lista generica

Ola pessoa estou com duas duvidas, na verdade é só para ter a confirmação.
1° segundo o livro SCJP 6 do Kathy Sierra pág. 360 diz o seguinte:

quero saber o seguinte esta regra só ser aplica ao ‘? extends’ ? pois visto no código abaixo linha 10 e 15, com o ‘? super’ consigo adicionar normalmente.
com o extends dar erro ao tenta adicionar um elemento.

2° não achei referência ou não me lembro de visto que diz que uma classe genérica só pode usar como coringa o extends e o super não veja o código linha 38

[code]package treino_12.Collection;
import java.util.HashMap;
import java.util.Map;

public class TesteHashCode {

public static void main(String[] args) {
    
    //Map<? extends Pessoa,String> map = new HashMap<Pessoa,String>(); // assim não funciona por causa do extends 
    Map<? super Pessoa,String> map = new HashMap<Pessoa,String>();// agora assim já funciona, porque com super funciona e com extends não funcionar     
    Pessoa p1 = new Pessoa("Ana");
    map.put(p1, "p1");  // dar //ERRO DE COMPILAÇÃO ser troca a linha acima pela debaixo
    System.out.println(map);
    
    List<? super Pessoa> listSuper = new ArrayList<Pessoa>();
    listSuper.add(p1);
    List<? extends Pessoa> listExtends = new ArrayList<Pessoa>();
    //listExtends.add(p1); //Erro de compilação
}

}

class Pessoa{

String nome;
Pessoa(String nome){this.nome = nome; }
Pessoa(){ this.nome ="Não informou o Nome";}

@Override
public boolean equals(Object o){
    return ((Pessoa)o).nome.equals(this.nome);
}

public int hashCode(){ return 9; }

}

class PessoaFisica extends Pessoa{}
class PessoaGenerica<T extends Pessoa>{}// assim funciona já funcionar com extends
//class PessoaGenerica<T super Pessoa>{} // assim já não funciona com o super//ERRO DE COMPILAÇÃO[/code]

Desculpe ser não fui claro e pelo português.

.

Agora me diga, as palavras reservadas (keywords) super e extends tem exatamente a mesma função?

Questão clássica de genéricos. O problema é que , pelas regras de genéricos do Java, você não pode adicionar um item do tipo Pessoa para um coleção do tipo T já que esta só poderá conter elementos pertencentes as subclasses de pessoa. Para adicionar pessoa à coleção , é necessário usar o relacionamento ‘? super pessoa’ , que significa que serão aceitos tanto o tipo pessoa como qualquer super classe de pessoa. O java não permite a adição em coleções que usam ‘? extends S’ , um clássico exemplo é o método Copy() de Collections.

É só pensar no que essas listas representam
List<? extends Pessoa>

representa uma lista de Pessoas ou qualquer subclasse da classe Pessoa. Portanto, não podemos afirmar se essa lista poderá um filho específico de pessoa.
Por exemplo, eu posso ter um List<PessoaFisica> e estar tentando inserir um PessoaJuridica, o que seria inválido. Por isso o Java proíbe.

Agora, List<? super Pessoa> significa uma lista de qualquer superclasse de pessoa. Como qualquer objeto de uma subclasse de pessoa É UMA Pessoa, ou É UM exemplar de qualquer superclasse de pessoa, adicionar um filho de pessoa ali não tem qualquer problema.

Por exemplo:
Eu poderia ter um List<Object> ou um List<Pessoa> e tento PessoaFisica, quanto PessoaJuridica poderia ser adicionado nessa lista sem problemas. Por isso, o Java permite a adição.

Agora sim entendi as razões referente as listas, agora só esta faltando entende porque não pode utilizar o super na Declaração da classe genérica,
mesmo assim obrigado a todos,

Valeuuu.