Dúvida Retornos covariantes

Pessoal, lendo o livro da Kathy, página 75 sobre os retornos covariantes surgiu uma dúvida no seguinte exemplo.

[code]public class Foo{
void go(){}
}

public class Bar extends Foo{
String go(){
return null;
}
}[/code]

Este seria, segundo o livro, um tipo de retorno covariante.
Mas o método sobrescrito(da superclasse) tem um tipo de retorno void, e o método sobrescritor(da subclasse) tem um tipo de retorno String.
Minha dúvida é se este código estaria errado, ou o tipo String seria um subtipo de void, estando este código correto?? :?:
Sinceramente acredito que o livro esteja errado, mas como não tenho certeza absoluta resolvi perguntar.
Obrigado.

eae rmlati.

pois bem… o exemplo citado a cima dá o seguinte erro :

“The return type is incompatible”

Alterar somente o tipo de retorno de um metodo, afim de sobescrever o mesmo, não é suficiente.

No caso de Tipos de Retorno Covariants, seria mais ou menos assim :

package javatestes;

public class CovariantTest {
	CovariantTest go() {
		return null;
	}

	public static void main(String[] args) {
	}

	public class Foo extends CovariantTest {
		Foo go() {
			return null;
		}
	}
}

Espero que te ajude

Abraços

   1. public void Foo{  
   2.   void go(){}  
   3. }  
   4.   
   5. public class Bar extends Foo{  
   6.   String go(int x){  
   7.     return null;  
   8. }  
   9. }  

No livro da Kathy o método que retorna uma String tem parametro, agora sim ele está (overload) não sei como está a tradução.

Mas no livro, o tema é sobre retornos covariantes de métodos sobrescritos, não tem nada a ver com métodos sobrecarregados.
Na verdade eu só queria saber se o tipo String é um retorno covariante para void.
De qq forma obrigado.

Bom, aqui no livro que estou lendo o exemplo que você citou está no tópico “Return Types on Overloaded Methods”.

public class Foo{
   void go() { }
}
public class Bar extends Foo {
   String go(int x) {

      return null;
   }
}

Já o do tópico “Overriding and Return Types, and Covariant Returns” seria este.

class Alpha {
  Alpha doStuff(char c) {
    return new Alpha();
  }
}

class Beta extends Alpha {
   Beta doStuff(char c) {     // legal override in Java 1.5
     return new Beta();
  }
}

Abraço

Valeu Gustavo tirou uma duvida minha tb.

[quote=GustavoLaguna]Bom, aqui no livro que estou lendo o exemplo que você citou está no tópico “Return Types on Overloaded Methods”.

public class Foo{
   void go() { }
}
public class Bar extends Foo {
   String go(int x) {

      return null;
   }
}

Já o do tópico “Overriding and Return Types, and Covariant Returns” seria este.

class Alpha {
  Alpha doStuff(char c) {
    return new Alpha();
  }
}

class Beta extends Alpha {
   Beta doStuff(char c) {     // legal override in Java 1.5
     return new Beta();
  }
}

Abraço[/quote]

A parte do livro que eu to falando é do capítulo 2 (livro português) pag 75 - A sobrescrição e os Tipos de Retorno; e Retornos covariantes.

Eu resolvi fazer um teste no Eclipse e este tipo de retorno não rola.

  • The returns type is imcompatible with Foo.go()

Beleza :smiley:

Oq o rmalati falou proceedi mesmo.

Estou usando a versão 1.6 do java. O exemplo deveria funcionar e nao funciona!

Affz eu tbm fiquei com essa duvida …
Como o rmalati disse … o codigo da pagina 75 não compila no eclipse
Tentei ate mudar a fonte para 1.5 (pois la diz que nessa versão aquele tipo de sobrescrição era permitido xD)

[code]package estudo;

public class Classe {
void met1() {

}

}

[/code]

[code]package estudo;

public class Classe2 extends Classe {
public String met1() {
return null;
}
public static void main(String[] arg){
Classe2 a = new Classe2();
}
}
[/code]
Mais da o mesmo erro :
attemping to use incompatible return types

Puxa vida, o código não é para compilar mesmo. Está errado, e há uma errata (correção) do livro. Se você tivesse lido desde o começo teria visto que é só um erro do livro.