Sobrescrição e os Tipos de Retorno; e Retornos Covariantes

4 respostas
sawamu

Caros,

estou estudando p/ certificação OCPJP através do livro da Kathy 2a. Edição.

Encontrei o código abaixo o qual no livro é dito como válido. Eu acho que o livro está errado.
Tentei compilar tal código e realmente não foi algo válido como dito no livro. Alguém viu isso estudando este livro?

class Foo {
	void go() {}
}

class Bar extends Foo {
	String go() { // sobrescrição válida em java 1.5 [isso é o que está escrito no livro]
		return null;
	}
}

Poxa, desde quando String é covariante de void?

É normal encontrar erros no livro da Kathy?

4 Respostas

Murillo_Pontes

Amigo o livro deve estar errado. Tb estou estudando e pelo que entendi os retornos covariantes são validos a partir de java 1.5 quando alteramos o retorno para uma subclasse do retorno do metodo que estamos sobreescrevendo, ex:

class Foo {  
    Foo go() {}  
}  
  
class Bar extends Foo {  
    Bar go() { // sobrescrição válida em java 1.5 [o retorno foi alterado para um subtipo, isto e valido]  
         
    }  
}

Talvez o livro tenha tentado lhe alertar sobre a sobrecarga:

class Foo {  
    void go() {}  
}  
  
class Bar extends Foo {  
    String go(int x) { // sobrecarga isto e valido  
       
    }  
}

Mas concordo o livro tem alguns erros, principalmente as versões traduzidas. Tem erros grotescos ate de portugues.

ViniGodoy

Desde nunca. Quando aparecer algo bizarro assim, teste no próprio Java, vai ver que não funciona.

É normal, como é em qualquer publicação.
Consulte sempre a errata.

sawamu

ViniGodoy,

meu medo era que fosse cobrado o jeito errado na hora da prova, mas acho que isso também não deve ocorrer né?

ViniGodoy

Não, isso não ocorre não.

Criado 2 de novembro de 2010
Ultima resposta 3 de nov. de 2010
Respostas 4
Participantes 3