Olá pessoa, estou precisando de ajuda em um exercício. Possuo 3 classes e 1 enum:
> public class Pessoa {
> private TipoPessoa tipo;
> public TipoPessoa getTipo() {
> return tipo;
> }
> public void setTipo(TipoPessoa tipo) {
> this.tipo = tipo;
> }
> }
>
> public class PessoaF extends Pessoa{
> private String cpf;
> public String getCpf() {
> return cpf;
> }
> public void setCpf(String cpf) {
> this.cpf = cpf;
> }
> }
>
> public class PessoaJ extends Pessoa{
> private String cnpj;
> public String getCnpj() {
> return cnpj;
> }
> public void setCnpj(String cnpj) {
> this.cnpj = cnpj;
> }
}
public enum TipoPessoa {
PESSOAFISICA, PESSOAJURIDICA;
}
Eu quero que ao setor o tipo de pessoa eu consiga criar uma instancia equivalente ao aplicado no tipo:
Por exemplo:
Pessoa p1 = new PessoaF();
p1.setCpf = 32443265332;
O problema é que a herança não possibilita eu criando um objeto apartir de uma Classe Pai eu consiga acessar os elementos das classes filhas, neste caso o cpf.
Tentei modificar o enum para ele me auxiliar no construtor do novo objeto da seguinte forma:
public enum TipoPessoa {
PESSOAFISICA (0, “Pessoa Fisica”) {
@Override
public Pessoa obterPessoa() {
return new PessoaF();
}
},
PESSOAJURIDICA (1, “Pessoa Juridica”) {
@Override
public Pessoa obterPessoa() {
return new PessoaJ();
}
};private TipoPessoa(){}
private TipoPessoa(Integer cod, String desc) {
this.cod = cod;
this.desc = desc;
}public abstract Pessoa obterPessoa();
private Integer cod;
private String desc;
public Integer getCod() {
return cod;
}
public void setCod(Integer cod) {
this.cod = cod;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
com esta modificação estou criando o objeto da seguinte forma:
Pessoa p1 = TipoPessoa.PESSOAFISICA.obterPessoa();
Quando eu solicito que ele imprima o tipo do objeto ele me fala que criou corretamente:
System.out.println(p1.getClass());
Retorno : class Pessoas.PessoaF
Porém ainda sim não consigo acessar o método setCpf() que se encontra dentro da classe PessoaF.
Alguém tem uma solução onde eu construir um objeto de acordo com o tipo que informo em seu atributo e consiga também acessar os atributos e métodos do novo objeto que foi criando como uma classe filha?