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 = [telefone removido];
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”) { <a class="mention" href="/u/override">@Override</a> public Pessoa obterPessoa() { return new PessoaF(); } }, PESSOAJURIDICA (1, “Pessoa Juridica”) { <a class="mention" href="/u/override">@Override</a> 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?
, na verdade é que quando postei a dúvida não havia concluído o código, existem situações onde não irei aplicar o objeto enum e sim o código Integer que define a opção do enumerador, então através do código o enum ira pesquisando-lo e retornará o enumerador correto, se o usuário colocar um código errado ele retornará uma excessão.