Herença, declaração de variaveis e reescrita de método String Exibe() { }

Bom dia minha situação é a seguinte

Classe Pessoa {

[code]public class Pessoa {
private String nome;
private int idade;
private String cpf;
private String endereco;

Pessoa (String nome, String cpf){
this.nome = nome;
this.cpf = cpf;
}

//Outras propriedades da classe ocultadas

public String exibe() { 
	String a = "Bem vindo "+this.getNome()+" Seu CPF é o "+this.getCpf();
	return a;
}

}[/code]

Classe PessoaFisica


public class PessoaFisica extends Pessoa {
    private String rg;
	PessoaFisica(String nome, String rg) {
		super(nome, rg);
		this.rg = rg;
		
	}
	public String exibe() { 
		String a = "Bem vindo "+this.getNome()+" Seu rg é o "+this.getRg();
		return a;
	}
	private String getRg() {
		return this.rg;
	}
	

}

e classe Pessoa Juridica


public class PessoaJuridica extends Pessoa {
    private String cnpj;
	PessoaJuridica(String nome, String cnpj) {
		super(nome, cnpj);
		this.cnpj = cnpj;
	}
	public String exibe() { 
		String a = "Bem vindo "+this.getNome()+" Seu CNPJ é o "+this.getCnpj();
		return a;
	}
	public String getCnpj(){
		return this.cnpj;
	}
	
	

}

1º - Gostaria de saber nesse caso se a melhor forma de trabalhar com o RG e o Cnpj seria declarando essas váriaveis dentro das extensões mesmo ou se seria melhor usar na própria classe Pessoa normal.

2º - O métodos EXIBE por ser string e alterar os getters utilizados tem que ser re-escrito da maneira que eu fiz, sei que da pra chamar o métodos original pelo super.nomedometodo() mas no exemplo que tive ele apenas adiciona um valor a uma conta efetuada, nesse caso por ser String fiquei em dúvida.

Obrigado.

1 - Melhor usar as extensões. E, no caso, o CPF também é um dado de pessoa física (CPF é a sigla de Cadastro de Pessoa Física).

2 - Pode chamar o super. Veja exemplo abaixo.

public class Pessoa {
    private String nome;
    private int idade;
    private String endereco;
	
    public Pessoa(String nome){
        this.nome = nome;
    }

    //Outras propriedades da classe ocultadas 

    public String exibe() { 
        return "Bem vindo "+getNome();
    }
}[/code]

[code]public class PessoaFisica extends Pessoa {
    private String cpf;
    private String rg;

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

    @Override
    public String exibe() { 
        return super.exibe() + " Seu cpf é " + getCpf() + " seu RG é " + getRg();
    }

    private String getRg() {
        return rg;
    }
    private String getCpf() {
        return cpf;
    }
}

Opa, valeu vini, fica melhor dessa forma que você passou amanha vou voltar a mecher no sistema e dou uma alterada, mas pelo que o pessoal do guj tbm me passou e ja li aqui na apostila vou deixar a classe pessoa como abstrata e tratar os tipos mesmos, obrigado pela ajuda.

Nem pensei em usar o super.exibe() concatenando coma mensagem inicial :(.