Problema com herança

3 respostas
V

Olá pessoal,

Tenho um vetor de objetos de Pessoa, em que PessoaFisica e PessoaJuridica herdam de Pessoa.

O problema: quando instancio um objeto do tipo PF ou PJ neste vetor de Pessoas, não consigo acessar seus métodos. O compilador diz que não consegue encontrar o método especificado. Suspeito que o compilador não consiga interpretar em tempo de compilação que há um objeto do tipo PessoaFísica dentro daquela posição, mas como resolver isso?

O exemplo abaixo exemplifica o que eu quero dizer:

// Classe Pessoa
public class Pessoa{
	String nome;

	public Pessoa(){
	}

	public Pessoa(String nome){
		this.nome = nome;
	}

	public String getNome(){
		return nome;
	}

	public void setNome(String nome){
		this.nome = nome;
	}
}

// Classe Pessoa Fisica
public class PF extends Pessoa{
	private String cpf;

	public PF(){
	}

	public PF(String nome, String cpf){
		super(nome);
		this.cpf = cpf;
	}

	public String getCpf(){
		return cpf;
	}

	public void setCpf(String cpf){
		this.cpf = cpf;
	}
}

// Main
public class Main{
	public static void main(String[] args){
		Pessoa p[] = new Pessoa[5];
		p[0] = new PF("Victor", "[telefone removido]");
		p[0].getCpf(); // Erro aqui: cannot find symbol method getCpf
	}
}

3 Respostas

L

está dando erro porque vc está criando um array de obj PESSOA tem que criar um array de obj PF daí vc consegue acessar

PF p[] = new PF[5];   
        p[0] = new PF("Victor", "[telefone removido]");   
        p[0].getCpf();
V

leopoldof:
está dando erro porque vc está criando um array de obj PESSOA tem que criar um array de obj PF daí vc consegue acessar

PF p[] = new PF[5]; p[0] = new PF("Victor", "[telefone removido]"); p[0].getCpf();


leopoldof, até entendo que essa seria uma solução mas…
Se um vetor de pessoa pode armazenar objetos que herdam da classe pai (no caso Pessoa), não é também possível acessar seus métodos e atributos por meio deste vetor geral?

O que entendi é que um vetor de Pessoa pode ter em suas posições qualquer objeto que herde de Pessoa, mas não sabia desse problema que apresentei. Então a única solução seria criar um vetor para Pessoas Físicas e um para Pessoas Jurídicas?

NapoCoelho

Olá vitorbrt!

Normal iniciantes terem essa dúvida.
Observe a direção do relacionamento entre as classes:

  • PF é uma Pessoa;
  • PJ é uma Pessoa;
  • Pessoa não é PF nem PJ, pq quem herda alguma coisa são PF e PJ, não Pessoa.

Isso implicou tb em um problema estrutural no seu sistema…

Uma possível solução seria: transformar classe Pessoa em abstract e criar um método virtual (sem implementação), algo como getDocumento(). Esse método seria implementado nas classes PF e PJ, retornando o código desejado.

Isso foi apenas uma sugestão, seguindo teu raciocínio. Abraços, espero ter ajudado!

Criado 17 de novembro de 2010
Ultima resposta 17 de nov. de 2010
Respostas 3
Participantes 3