Tipo de retorno e sobreescrita (override)

3 respostas
LPJava

ae pessoal lendo o livro da kathy pg 75 - portugues segunda edicao
ela no inicio que nao posso alterar o tipo de retorno em subcricao isso na pg 74 na pagina 75 ela muda de ideia diz que é possivel… ai ela quer me enlouquecer… pq peguei a sintaxe dela e tentei e nao compilou devido o tipo de retorno ser alterado e nao ser uma sobrecarga… veja ai… sera que mais um erro do livro ou eu q to errado?

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

ela disse que isso eh completamente valido… to compilando de forma normal.

:?

3 Respostas

T

A partir do Java 5.0 é possível alterar o tipo de retorno de um método sobreescrito (“overridden”) para uma subclasse desse tipo.

Exemplo: (se você está estudando direitinho sabe que Number é superclasse de Long e Integer):

class Bla {
    public Number getVal() {
        return new Long(45);
    }
}
class Ble extends Bla {
    public Integer getVal() {
        return new Integer (23);
    }
}
class Blog {
     public static void main(String[] args) {
         Bla bla = new Ble();
         Number n = bla.getVal();
         System.out.println (n); // imprime 23
    }
}

Como “String” não é subclasse de “void”, o seu exemplo não pode funcionar.

LPJava

é sso thingol eu voltei e li novamente essa parte para que o tipo de retorno seja permitido na subcricao, o tipo deve ser sub do tipo da super… entao acho q foi um erro no livro da kathy pq ela afirma que String vai subscrever o void… mais entao eu posso subscrever desde que o tipo seja uma sub do tipo da superclass?

T

“subscrever” é assinar, como alguém que faz uma assinatura de uma revista (inglês: subscribe).

O nome técnico desse “override” (sobreposição ou sobreescrita) especial, onde o método retorna uma classe que é subclasse do método sobreescrito, é “covariância”, um recurso novo do Java 5.0.

Criado 25 de janeiro de 2007
Ultima resposta 29 de jan. de 2007
Respostas 3
Participantes 2