Tipos de Retorno Legais


Tipos de Retorno em Métodos Sobrecarregados

Métodos sobrecarregados podem ter qualquer tipo de retorno diferente do método original. O que não se pode fazer é mudar apenas o tipo de retorno, pois a principal mudança que deve ser feita é mudar a lista de argumentos.

public class Casa {
     
      public void limpar() {
           
      }
     
      /* métodos sobrecarregados podem ter
       * tipos de retorno diferentes */
      public int limpar(int qtdComodos) {
            return 1;
      }

}


Sobrescrita e Tipos de Retorno, e Retornos Covariantes

Quando uma subclasse precisa mudar a implementação de um método herdado (overriding), a subclasse deve definir um método que combine com a versão original.
No Java 5 é permitido mudar o tipo de retorno do método sobrescrito, desde que o novo tipo de retorno seja um subtipo do retorno declarado no método original; é o chamado retorno covariante.

public class Letras {
     
      public Letras getLetra() {
            return new Letras();
      }

}


public class Vogais extends Letras {

      /* tipo de retorno legal para o overriding,
       * pois Vogais é subclasse de Letras */
      public Vogais getLetra() {
            return new Vogais();
      }
     
}


Retornando um Valor

Existem seis regras para retornar um valor:
·         É possível retornar null em um método com um objeto de referência como tipo de retorno;
·         Um array é um tipo de retorno legal;
·         Em um método com um tipo de retorno primitivo pode-se retornar qualquer valor que pode ser convertido implicitamente para o tipo de retorno declarado; ou seja, um método com tipo de retorno inteiro pode retornar, por exemplo, um char, que é compatível com o int;
·         Em um método com tipo de retorno void não se deve retornar nada;
·         Em um método com um objeto de referência como retorno, pode-se retornar qualquer tipo de retorno que possa ser feito cast implicitamente para o tipo de retorno declarado, ou seja, qualquer subclasse; qualquer objeto que passe no teste IS-A pode ser retornado de um método.


public class ExRetorno {

      public Date getData()  {
            return null;
      }
     
      public String[] getArray() {
            return new String[] {"1", "2"};
      }
     
      public int getQtd() {
            char a = 'a';
            return a; //char é compatível com int
      }
     
      public void setQtd() { }
     
      public Object getObjeto() {
            return new ExRetorno();
      }
     
}


Fonte: SCJP Sun Certifi ed Programmer for Java 6 Study Guide

0 comentários:

Postar um comentário