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.
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();
}
}
[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.
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.