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