Errata no livro da Kathy sobre subscrita de método?

5 respostas
danielbussade

Olá a todos, estou estudando o livro da kathy pra certificação SCJP, e no capítulo 2, na página 75 que fala sobre subscrita de métodos o livro diz que é possível subscrever um método da seguinte maneira com o java 1.5:

public class Foo {
  void go() {}
}

public class Bar extends Foo {
  String go() {} //subscrição válida em Java 1.5
}

Ou seja trocar o tipo de retorno, do método subscrito, desde que o tipo de retorno possar ser convertido implicitamente para o retorno declarado.
Mas eu tentei compilar este exemplo aqui, com o javac 1.6, e deu falha na compilação, gerando o erro:" tipo de dados incompatíveis".
Isso é um erro do livro, ou entendi algo errado??

Att

5 Respostas

fujioka

Acho que é erro do livro quando vc coloca

String go(){} // assim não compila mesmo… pois o compilador vai reclamar mesmo…

<- o metodo tem que ter retorno so não tem retorno de nada quando o metodo é declarado como void.

void não tem retorno… =) logo vc não pode trocar o tipo de retorno =)

alguns exemplinhos: adicionei retorno de covariantes =)

public interface Teste2 {

}


class Foo{
	public Foo go() {
		return new Foo();
	}
}

class Bar extends Foo {
	public Foo go(){ // subscrição válida em Java 1.5
	return new Bar();  
	} 
}

class Bar2 extends Bar {
	public Bar go(){// subscrição válida em Java 1.5
	return null;  
	} 
}

class bonavides extends Bar{
	public Foo go(){
		return new bonavides();
	}
}
J

Fique tranquilo, vc está certo quem está errado é o livro mesmo, eu tb tinha detectado esse problema. Espere por mais algumas coisinhas desse tipo nesse livro. A medida que vamos entendendo o assunto esses errinhos saltam os olhos, portanto não comprometerão os estudos, no máximo teremos mais alguns neurônios queimados :slight_smile:

danielbussade

Valeu pessoal, agora sim ficou claro!!

Att

Ramundodavy

é amigo, de fato com relação ao exemplo, o livro está errado, mas com relação aos tipos de retornos covariantes ele está certo, a partir do java 1.5 você pode sobrescrever um método tendo como retorno um subtipo do tipo de retorno declarado no método sobrescrito.

bdias1990

estou na msm parte que vc vá ate a pagina 64 e veja a tabela acima que fala sobre as regras neste caso diz que nao é overreading nem overloard por causa que nao ouve mudança nos argumentos e o tipo de retorno porem como o colega disse acima é possivel por covariante dito isso na página 75 porem o comentário é claro somente versao 1.5, na minha humilde opniao e bom senco na página ela diz que isso cai no exame algumas questoes com essa suposta “pegadinha” quem sou eu par duvidar dela,vou testar com mais calma
abs.

Criado 9 de fevereiro de 2008
Ultima resposta 5 de abr. de 2010
Respostas 5
Participantes 5