E aí pessoal tudo bem? Estou lendo o livro da Kathy SCJP 5.0 e fiquei na dúvida em um trecho que ela fala sobre subscrição dizendo que isso não é possível:
public class Foo{
void go(){}
}
public class Bar extends Foo{
String go(){ //Inválido, não é possível modificar apenas o tipo de retorno.
return null;
}
}
Até aí tudo bem. Só que no parágrafo seguinte o livro diz o seguinte:
"(abre aspas)
A subscriçao e os Tipos de Retorno, e Retornos Covariantes
Quando uma subclasse quiser alterar a implementação de um método herdado (uma subscrição), terá que definir um método que coincida exatamente com a versão herdada. Ou, a partir do Java 5, você tem a possibilidade de modificar o tipo de retorno no método subscritor, desde que o novo tipo de retorno seja um subtipo do tipo de retorno declarado do método subscrito (da superclasse).
Vejamos um retorno covariante em ação:
public class Foo{
void go(){ }
}
public class Bar extends Foo{
String go() { //subscrição válida em Java 1.5
null;
}
}
"(fecha aspas)
O trecho acima foi todo retirado do livro, porém quando fui testar esse exemplo, que segundo o livro funciona, deu erro de compilação (sendo que o java aqui é o 6, e usei o netbeans para testar). Ele deveria funcionar??
Fiquei na dúvida de como isso funciona