Overriden

8 respostas
C

Olá pessoal!

Estou estudando pra certificação e primeiro estudei o livro da certificação 1.4 que diz que isso não é posível compilar esse código:

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

}

class Foo{	
	void foo(){}

Pois o tipo de retorno do método foo da classe Bar deveria retornar void, ou seja, nada…

Porém no livro da Kathie Sierra, Java 5

Ele diz que isso é possível, porém compilei com a versão do Java 5 e não deu certo, isso é realmente possível?

8 Respostas

J

No Java 5.0 tem um recurso chamado "Covariant return types" onde você pode retornar um tipo diferente no método sobrescrito, desde que os tipos sejam compativeis, o que não era possivel antes do Java 5.0:

ex.:

public class Foo{
   long foo(){
      return 10L;
   }
}

public class Bar extends Foo{
   int foo(){
      return 3;
   }
}

Veja que os tipos de retorno são diferentes, mas são compativeis, assim como em:

public class Pai{
   public List getLista(){
      return new LinkedList();
   }
}

public class Filha extends Pai{
   public ArrayList getLista(){
      return new ArrayList();
   }
}

Esses códigos não funcionam em Java 1.4, mas funcionam no 5.0.

Porem esse exemplo que você deu não funciona em nenhum dos dois, porque os tipos void e String não são compatíveis.

C

Jair… pelo que vi o overidden que vc fez com o long/int e depois pra List/ArrayList, notei que ele esta overriden do maior pra o menor ou seja… long 64 -> int 32 e List -> ArrayList… eu poderia fazer…

public class X {
   public ArrayList a() {
      return new ArrayList() {
      }
   }
}

public class Y extends X {
   public List a() {
      return new ArrayList();
   }
}

Isso pode ser feito ?

C

Alguém poderia me dizer quais são as diferenças de mais impacto além do Generics, Enum, novo For e essa nova forma de usar overriden, ou seja, se há mais coisas novas???

S

Import static, annotations, varargs, autoboxing…

K

o que são os annotations?

G

É o suporte a MetaDados do Tiger (Java 5). Na verdade é uma forma de adicionar suporte a transação, logging, validações, etc através de tags.

http://www.guj.com.br/java.tutorial.artigo.136.1.guj

K

vlw cara

S

“Cassolato”:
Jair… pelo que vi o overidden que vc fez com o long/int e depois pra List/ArrayList, notei que ele esta overriden do maior pra o menor ou seja… long 64 -> int 32 e List -> ArrayList… eu poderia fazer…

public class X {
   public ArrayList a() {
      return new ArrayList() {
      }
   }
}

public class Y extends X {
   public List a() {
      return new ArrayList();
   }
}

Isso pode ser feito ?

Eu também queria saber se é possível fazer overriden do menor para o maior, entretanto, algo me diz não ser possível. Acho que fazer overriden de um método que retorne tipo de dados inteiros para retornar dados .flutuante…!? Se alguém souber como…poste…quero saber…se não vou ter que perguntar ao James Goslin…rs

Criado 8 de novembro de 2006
Ultima resposta 15 de nov. de 2006
Respostas 8
Participantes 7