Duvida sobre classes extendidas

6 respostas
W

Pessoal,

Dúvida sobre o ‘extends’ class.

Exemplo:

public class Usuario{
	private int id;
        private String user;

        /* getters and setters... */
}
public class UsuarioDetalhes extends Usuario{
	private String email;
        private String fone;

        /* getters and setters... */
}

Agora em outra classe faço o seguinte:

public class TestesExample{
	private UsuarioDetalhes usuarioDetalhes;
        private Usuario usuario;

        public void carregaValores(){
                usuarioDetalhes = new UsuarioDetalhes();
                usuario = new Usuario();

                usuario = dao.findUser("teste");

                // AQUI: como coloco o 'usuario' dentro do 'usuarioDetallhes'
                // Por CAST não da.
                usuarioDetalhes = (UsuarioDetalhes) usuario;
        }
}

Como colocar os valores da instancia ‘usuario’ dentro da instancia ‘usuarioDetalhes’ ja que o usuarioDetalhes extende a classe usuario?

Obrigado

6 Respostas

RodrigoKaos

[i]Já tentou esse cast?

[/i] usuarioDetalhes = (UsuarioDetalhes) usuario;

W

Sim é esse cast mesmo que coloquei.

Ali no código escrevi apenas ‘usuario’ errado… não funcionou.

pmlm

Que objecto é devolvido pelo teu método dao.findUser(“teste”); ?

Nota que apenas podes fazer cast para UsuarioDetalhes se o objecto for efectivamente desse tipo.
Tem em conta que todo o UsuarioDetalhes é um Usuario mas nem todo o Usuario é um UsuarioDetalhes.

class A{}

class B extends A{}

...

A obj1 = new A(); // ok
A obj2 = new B(); // ok
B obj3 = new A(); // erro
B obj5 = (B) obj2; // ok - apesar de declarado como A, o objecto é efectivamente um B, pode ser feito um cast
B ojb4 = (B) obj1;// erro - parece-me que é esta a tua situação. o objecto não é da subclass, logo não pode ser feito o cast
ViniGodoy

Não coloca.

Não é assim que usa herança.

W

O dao.findUser(“teste”); retorna o tipo ‘Usuario’;

Tentei utilizar:

Usuario user = new UsuarioDetalhes(); // ok

user = dao.findUser("teste"); // ok

UsuarioDetalhes usuarioDetalhes = (UsuarioDetalhes) user; //não faz o cast.

Erro…

RAVE: Servlet.service() for servlet [default] in context with path [/testes] threw exception
java.lang.ClassCastException: Usuario cannot be cast to UsuarioDetalhes

Vou entender melhor isso…

Ruttmann

weder.vierra:
O dao.findUser(“teste”); retorna o tipo ‘Usuario’;

Tentei utilizar:

Usuario user = new UsuarioDetalhes(); // ok

user = dao.findUser("teste"); // ok

UsuarioDetalhes usuarioDetalhes = (UsuarioDetalhes) user; //não faz o cast.

Erro…

RAVE: Servlet.service() for servlet [default] in context with path [/testes] threw exception
java.lang.ClassCastException: Usuario cannot be cast to UsuarioDetalhes

Vou entender melhor isso…

Nesse caso vai dar erro de cast pois o compilador não tem como saber se o teu handler user sempre vai ter um objeto compatível com UsuarioDetalhas pra fazer o cast. Você atribui um tipo genérico nele, não tem como mandar fazer o cast pra UsuarioDetalhes de modo seguro por conta da incerteza, por isso lança a exceção.

Criado 11 de dezembro de 2013
Ultima resposta 12 de dez. de 2013
Respostas 6
Participantes 5