Herança - Como copiar a super de uma filha para a outra?

12 respostas
alcemir

Opa!

Boa tarde à todos.

Pois é estou com um problema de herança, parece bobeira mas não estou conseguindo saber como fazer…

Antes de tudo eu utilizo JPA2.0, EJB3.0, JSF2.0, PostreSQL…

Historinha: Possuo uma classe pessoa (super) e as aluno (filha) e responsavel (filha)… porém tem casos que o responsável é o próprio aluno, ou seja, deverá ser a mesmo super para as outras filhas… será que fui claro?
Basicamente acontece assim: Há o cadastro do responsável, se o responsável for o próprio aluno, então é copiado a pessoa para o aluno e adicionado as informações exclusivas do aluno. Porém não sei como faz essa cópia, pois se eu fizer a cópia dos dados eu estou apenas instanciando outra pessoa com o mesmo id aí dá o erro de duplicidade, se eu não copiar o id vai ser criado duas pessoas iguais no sistema ai é inconsistência de dados.

Será que alguém poderia me mostrar como é feito em java essa cópia?

abraço,
Alcemir

12 Respostas

L

Quais são as instruções contidas no construtor da superclasse?

alcemir

nada… os construtores estão apenas:

public Pessoa() {
}

public Aluno() {
}

public Responsavel() {
}

guisantogui

os construtores sempre devem chamar o super(); se vc qr pegar os dados da classe Pai!

alcemir

como?

public Pessoa Responsavel() {

return super();

}
public Aluno(Pessoa p) {

this.super() = p;

}

assim?

L

Os construtores da subclasse, quando nao informado nem super() e nem this() na primeira linha da instrução do construtor, ele insere, implicitamente, o super(). Se voce colocou algum construtor com parametros na superclasse e nao fez a chamada manualmente nos construtors da subclasse dará um erro, já que mesmo assim será inserido um super(), e este está com argunmentos vazios.

Então todas as classes filhas tem o mesmo super.

guisantogui

Lucas Emanuel:
Os construtores da subclasse, quando nao informado nem super() e nem this() na primeira linha da instrução do construtor, ele insere, implicitamente, o super(). Se voce colocou algum construtor com paramentros na superclasse e nao fez a chamada manualmente nos construtors da subclasse dará um erro, já que mesmo assim será inserido um super(), e este está com argunmentos vazios.

Então todas as classes filhas tem o mesmo super.

Não sabia disso lucas, vlw a dica!

L

Ele terá inclusive o construtor da classe Object, já que este é “Pai” de todas as classes.

alcemir

hmmm… interessante…

basicamente você está me dizendo que se eu fizer:

aluno = new Aluno(responsavel);

vai funcionar… mas não funcionou não, tá dando erro, diz que são objetos diferentes…

L

Bom dia,

Nesse caso seu, acho melhor usar composição para isso.

Class Aluno{
       DadosPessoais dados;
}

Class Responsavel{
        DadosPessoais dados;
}

dai, quando um aluno for responsavel tambem bastaria vc instanciar um responsavel e setar os dadospessoais

M

Qual a estrutura de suas classes? O Aluno contém um atributo Responsavel? Se for, esse atributo pode apontar para o próprio aluno, caso necessário.

alcemir

na verdade é uma herança…

Pessoa, Aluno, Responsavel, ou seja, na pessoa são os dados incomuns, em no aluno e responsavel são os dados exclusivos.

Eu entendi o que a galera falo, mas não estou conseguindo implementar, alguém poderia me passar o código? Eu quero tirar a pessoa do responsavel e passar a pessoa para o aluno.

L

Então, com sua hierarquia um objeto sera ou um aluno ou um responsavel (ambos serao pessoas) mas nunca um objeto sera um aluno e um responsavel. O que vc pode fazer é copiar os atributos ou invez de usar heranca usar composicao

Criado 15 de abril de 2010
Ultima resposta 16 de abr. de 2010
Respostas 12
Participantes 5