Dúvida Retornos covariantes

10 respostas
rmala_ti

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

public class Foo{
  void go(){}
}

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

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.

10 Respostas

paulo.ubuntu

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

GustavoLaguna
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.

rmala_ti

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.

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

FilhoDoRei

Valeu Gustavo tirou uma duvida minha tb.

rmala_ti

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

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()
GustavoLaguna

Beleza :smiley:

jimmyhc

Oq o rmalati falou proceedi mesmo.

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

Denys20
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)
package estudo;

public class Classe {
	void met1() {
		
	}
}
package estudo;

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

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.

Criado 11 de abril de 2008
Ultima resposta 29 de abr. de 2009
Respostas 10
Participantes 7