ArrayList + Classe Abstrata + Herança

Boa tarde gente, sou novo no forum, e gostaria de uma ajuda suas.
Estou com um projeto de faculdade para fazer e estou com uma duvida cruel que nao consigo resolver.

Tenho uma classe pessoa.

[code]public abstract class Pessoa implements Comparable{

public static final int CLIENTE = 1;
public static final int VENDEDOR = 2;
public static final int FORNECEDOR = 3;

private int codigo;
private String nome;
private String telefone;
private String email;
private GregorianCalendar dataCad;

public Pessoa(int codigo, String nome, String telefone, String email,
		GregorianCalendar dataCad) {
	super();
	this.codigo = codigo;
	this.nome = nome;
	this.telefone = telefone;
	this.email = email;
	this.dataCad = dataCad;
}

GET E SET estão implementados.

    public abstract int getTipo();

public int compareTO(Pessoa o){
	return nome.compareTo(o.nome);
}

@Override
public String toString() {
	return  "Codigo: " + codigo + "\n" + 
			"Nome: " + nome + "\n" +
			"Telefone: " + telefone + "\n" + 
			"E-mail: " + email + "\n" +
			"Data de Cadastro: " + dataCad;
}

[/code]

Até ai tudo blz…

Dai tenho uma classa Cliente que tem com o herança a classe pessoa.

public class Cliente extends Pessoa {

	private String cpf;
	private double limiteCredito;
	
	public Cliente(int codigo, String nome, String telefone, String email,
			GregorianCalendar dataCad, String cpf, double limiteCredito) {
		super(codigo, nome, telefone, email, dataCad);
		this.cpf = cpf;
		this.limiteCredito = limiteCredito;
	}

GET E SET AQUI NO MEIO
	
	@Override
	public String toString() {
		return "CPF:" + LtpUtil.formatarCPF(cpf) + "\n" +
				"Limite Credito: " + LtpUtil.formatarValor(limiteCredito, "#,##0.00");
	}

	@Override
	public int getTipo() {
		return 1;
	}
@Override
	public int compareTo(Pessoa o) {
		// TODO Auto-generated method stub
		return 0;
	}

Obs: tenho mais duas outras classes, fornecedor e vendedor que são “filhos” da classe pessoa.

Blz, até ai tudo bem.
O problema é:

Tenho uma classe comercial que tenho que fazer todo o processamento de dado.
Dentro dela tenho que fazer uma arraylist tipo pessoa.

[code]import java.util.ArrayList;

import dados.Pessoa;

public class Comercial {

public static ArrayList<Pessoa> listaPessoas = new ArrayList<>();

}
[/code]

Minha duvida é:
Como faço a inclusão de um cliente em uma ArrayList tipo Pessoa?
Inserir dados do cliente aqui.

[code]private static void incluirCliente() {
int codigo = 0;
if (Comercial.listaPessoas.isEmpty()){
codigo = 1;
}else {
codigo = Comercial.listaPessoas.get(Comercial.listaPessoas.size() -1).getCodigo() +1;
}
String nome = Console.readLine("Nome do cliente: ");
String telefone = Console.readLine("Telefone do cliente: ");
String email = Console.readLine("E-mail do cliente: ");
GregorianCalendar dataCad = new GregorianCalendar();
String cpf = Console.readLine("CPF do cliente: ");
double limiteCredito = Console.readDouble("Limite de Credito do Cliente: ");
try {
Pessoa clienteNovo = new Cliente(codigo, nome, telefone, email, dataCad, cpf, limiteCredito);
Comercial.incluirPessoa(clienteNovo);
} catch (Exception e) {
// TODO: handle exception
}

	}

[/code]
Processamento desses dados fica na classe Comercial.

[code]public class Comercial {

public static ArrayList<Pessoa> listaPessoas = new ArrayList<>();


public static void incluirPessoa(Pessoa obj){
// O QUE COLOCAR AQUI DENTRO???
    // ESSE E O MEU PROBLEMA
	
}[/code]

Como consulto o CPF de um cliente dentro dessa ArrayLista tipo pessoa?

Não to conseguindo entender isso, obrigado pela atençao!

Você deve verificar se o objeto é do tipo Cliente e, depois, converter a Pessoa em Cliente e assim verificar o resultado.[code]List pessoas = new ArrayList();

pessoas.add(new Cliente(“João”));
pessoas.add(new Fornecedor(“Sadia”));
pessoas.add(new Cliente(“José”));
pessoas.add(new Cliente(“Pedro”));
pessoas.add(new Cliente(“Tiago”));
pessoas.add(new Fornecedor(“Unilever”));
pessoas.add(new Fornecedor(“Nestlè”));

for (Pessoa pessoa : pessoas) {
if (pessoa instanceof Cliente) {
Cliente cliente = (Cliente) pessoa;
boolean cpfValido = verificarCPF(cliente.getCPF());
}
}[/code]

Isso ajuda?
Fique com Deus! :smiley:

[quote=Nicolas Fernandes]Você deve verificar se o objeto é do tipo Cliente e, depois, converter a Pessoa em Cliente e assim verificar o resultado.[code]List pessoas = new ArrayList();

pessoas.add(new Cliente(“João”));
pessoas.add(new Fornecedor(“Sadia”));
pessoas.add(new Cliente(“José”));
pessoas.add(new Cliente(“Pedro”));
pessoas.add(new Cliente(“Tiago”));
pessoas.add(new Fornecedor(“Unilever”));
pessoas.add(new Fornecedor(“Nestlè”));

for (Pessoa pessoa : pessoas) {
if (pessoa instanceof Cliente) {
Cliente cliente = (Cliente) pessoa;
boolean cpfValido = verificarCPF(cliente.getCPF());
}
}[/code]

Isso ajuda?
Fique com Deus! :D[/quote]

Putz cara, e como me ajudo, muito obrigado mesmo, vou fazer uns testes aqui e te respondo.

Muito obrigado mesmo!
Fique com Deus!

Obrigado novamente!

Por favor, não use [Marcações] para colocar informações óbvias, como o fato de você ter uma [Dúvida Cruel].

Sem uma dúvida, você nem sequer abriria o tópico, certo?

Você pode testar os tipos das classes através do “instance of”. Entretanto, se você estiver fazendo isso com frequência, é porque provavelmente sua relação de herança está incorreta. Ou, no mínimo, o fato de você usar uma lista só para representar as várias pessoas.

[quote=ViniGodoy]Por favor, não use [Marcações] para colocar informações óbvias, como o fato de você ter uma [Dúvida Cruel].

Sem uma dúvida, você nem sequer abriria o tópico, certo?
[/quote]
Desculpa

Fessor mando fazer com uma lista so =/
Fiz o trabalho inteiro direcionando para 3 listas, clientes fornecedores e vendedores, dai ele me vira e fala que nao pode! haha
dai eu tava com essa duvida. Mas ja consegui entender graças ao Instanceof! haha

Brigado ai!
Fique com Deus!

Lembre-se que sua lista só aceita objetos do tipo pessoa. Como você declarou

public class Cliente extends Pessoa {
//resto do código
}

você está dizendo que um cliente É uma pessoa portanto ele aceita numa boa.

Pergunta, No meu codigo, na classe pesoa existe a seguintes linhas:

public static final int CLIENTE = 1; public static final int VENDEDOR = 2; public static final int FORNECEDOR = 3;

onde vou usar e para que vou usar essas linhas?

[quote=Jorge Back]Pergunta, No meu codigo, na classe pesoa existe a seguintes linhas:

public static final int CLIENTE = 1; public static final int VENDEDOR = 2; public static final int FORNECEDOR = 3;

onde vou usar e para que vou usar essas linhas?[/quote]

Boa pergunta, meu amigo. Você colocou essas linhas e não sabe o porquê? Descubra o porquê de tê-las colocado, mas não, não faz sentido fazer uso dessas variáveis.

[quote=Nicolas Fernandes]
Boa pergunta, meu amigo. Você colocou essas linhas e não sabe o porquê? Descubra o porquê de tê-las colocado, mas não, não faz sentido fazer uso dessas variáveis.[/quote]

Haha, no trabalho ele falou para criar essas constantes, mas eu nao entendi pra que, eu nao uso elas em momento nenhum =/

Acho que serve pra diferenciar entre Cliente, Vendedor e Fornecedor.

Quando for criar um desses objetos, você coloca um inteiro no construtor que represente o tipo de Pessoa.
Por exemplo, declare um inteiro de nome ‘tipo’.
Se ele for um cliente, o construtor faz: tipo = CLIENTE
ou tipo = VENDEDOR…

Ele deve ter botado isso pra não precisar usar o instanceOf

if(pessoa.tipo == CLIENTE ) ou if(pessoa.tipo == 1)
é cliente

etc