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

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

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

nada… os construtores estão apenas:

public Pessoa() {
}

public Aluno() {
}

public Responsavel() {
}

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

como?

public Pessoa Responsavel() {
return super();
}

public Aluno(Pessoa p) {
this.super() = p;
}

assim?

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.

[quote=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.[/quote]

Não sabia disso lucas, vlw a dica!

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

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…

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

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.

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.

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