Classe Pessoa PessoaFisica , PessoaJuridica Cliente e Vendas

Estou criando a logica de um projeto para cadastro de cliente onde cliente pode ser pessoa jurídica ou Fisica, alguem tem uma sujestão baseado nas tradicionais classes:

Pessoa
PessoaJuridica extends Pessoa
PessoaFisica extends Pessoa

Cliente - pode ser pessoa fisica ou juridica

como crio a classe cliente para que possa receber um dos tipos de Pessoa?

Utilize do poliformismo. Faça com que a classe Pessoa seja abstrata para que ela não possa ser instanciada, e na classe Cliente crie um método de cadastro que recebe Pessoa.

Use composição com a classe Pessoa, que poderá ser tanto pessoa física como jurídica.

[]'s


public abstract class Pessoa {
    
    private String nome;
    private String endereco;
    private String telefone;

// getters & Setters ..  
    
}

public class PessoaFisica extends Pessoa{
    
    private String cpf;
    private String rg;
  
  // getters & Setters ..  
}

public class PessoaJuridica extends Pessoa {
    private String cnpj;
    private String ie;

// getters & Setters ..  
}

public class Cliente {
    
public static final int FISICA = 0;
public static final int JURIDICA = 1;
PessoaFisica pf;
PessoaJuridica pj;

    public Cliente(int type) {
        
        switch(type){
            case FISICA:
                pf = new PessoaFisica();
        
        case JURIDICA:
                pj = new PessoaJuridica();        
        
        }
        
    }

    public PessoaFisica getPf() {
        return pf;
    }

    public void setPf(PessoaFisica pf) {
        this.pf = pf;
    }

    public PessoaJuridica getPj() {
        return pj;
    }

    public void setPj(PessoaJuridica pj) {
        this.pj = pj;
    }


    
}

uma idéia que me veio.

Essa não é a maneira correta de se fazer. Procure aprender polimorfismo.

Se preferir video-aulas, assista as aulas 49,50,51 e 52 desse link: http://www.youtube.com/playlist?list=PLA03DEA5320ECBF85

Faça um favor a você mesmo: NÃO use herança de Pessoa pra Pessoa Física e Jurídica. Apesar do nome parecido, o comportamento delas é sempre absurdamente diferente. Aprendi do pior jeito possível umas três vezes, porquê nem sempre eu tinha opção) que fazer isso traz problemas.
Separa esse bagulho, que 3 ou 4 atributos economizados não justificam a herança aí.
Abraço!

eu só queria saber o que ponho na classe cliente para que inclua pessoa tanto fisica quanto juridica .

Você já pesquisou polimorfismo? Acho que não. Vou te mostrar como faz dessa vez, mas não deixe de pesquisar para que aprenda!

[code]public abstract class Pessoa {

private String nome;
private String telefone;
private String endereco;

    //getters e setters

[/code]

[code]public class PessoaFisica extends Pessoa {

private String cpf;
private String rg;

    //getters e setters

[/code]

[code]public class PessoaJuridica extends Pessoa {

private String cnpj;
private String ie;

    //getters e setters

[/code]

[code]public class Cliente {

private static ArrayList<Pessoa> listaDeClientes = new ArrayList<Pessoa>();

public void adicionaCliente(Pessoa p) { //Aqui entra um dos conceitos de polimorfismo... estamos pedindo pra receber uma pessoa aqui. Uma PessoaFisica é uma Pessoa? E uma Pessoa Juridica é uma Pessoa? No nosso caso sim!
	Conta.listaDeClientes.add(p);
	System.out.println(p.getNome() + " adicionado com sucesso na lista de Clientes!");
}	

public ArrayList<Pessoa> getListaDeClientes() {
	return listaDeClientes;
}	

}[/code]

[code]public class Teste {

public static void main(String[] args) {
	
	//Pessoa p = new Pessoa(); //não instancia, pois a classe Pessoa é abstrata
	PessoaFisica pf = new PessoaFisica();
	PessoaJuridica pj = new PessoaJuridica();
	
	pf.setNome("Pessoa Física");
	pj.setNome("Pessoa Juridica");
	
	Cliente c = new Cliente();
	c.adicionaCliente(pf);
	c.adicionaCliente(pj);		
}

}
[/code]

Pessoal boa noite,

Sou iniciante na linguagem java e tenho algumas dúvidas em relação ao conceito de polimorfismo. Através da classe Pessoa, tenho que fazer um vetor que receba os dados dos clientes, imprimá-os e também os “diferenciem” entre os tipos de cliente: Pessoa Física e Pessoa Jurídica.
No momento da comparação através do laço “if”, eu nao estou sabendo mais como fazer.
Caso alguém possa me ajudar ou passar orientações, fico agradecido. O código que está abaixo, é até onde eu consegui fazer.


package br.edu.ifsuldeminas.teste;

import java.util.Scanner;

public class Teste {

  
    
    public static void main(String[] args) {
        int i=0;
        Pessoa clientes[] = new Pessoa[5]; 
        clientes[0] = new PessoaFisica();
        clientes[1] = new PessoaJuridica();
        clientes[2] = new PessoaFisica();
        clientes[3] = new PessoaJuridica();
        clientes[4] = new PessoaFisica();
        
        Scanner entrada = new Scanner(System.in);
        
        for(i = 0; i < 5; i ++){
            System.out.println("---------------------------------------------");
            System.out.print("Digite o nome da Pessoa:");
            clientes[i].setNome(entrada.nextLine());
            System.out.print("Digite o endereco da Pessoa:");
            clientes[i].setEndereco(entrada.nextLine());
            System.out.print("Digite o telefone da Pessoa:");
            clientes[i].setTelefone(entrada.nextInt());
            entrada.nextLine();
            System.out.println("---------------------------------------------");
            
         
              //Aqui precisa fazer a comparação se o cliente é Pessoa Fisica ou Pessoa Juridica.//  
            
            
        }
        
        System.out.println("Dados dos Clientes");    
       
            for(i = 0; i < 5; i ++){
              System.out.println("---------------------------------------------");
              System.out.println("Clientes["+i+"]="+clientes[i].getNome());          
              System.out.println("Clientes["+i+"]="+clientes[i].getEndereco());          
              System.out.println("Clientes["+i+"]="+clientes[i].getTelefone());   
              System.out.println("---------------------------------------------");
           }

        
    }
}

Geralmente eu crio apenas uma classe Pessoa e todas as pessoas no meu sistema herdam de Pessoa, sejam elas físicas ou jurídicas.
Então crio uma classe ‘Documento’ que tem rg, cpf, cnpj e etc. E então a classe Pessoa passa a ‘ter’ uma variável do tipo Documento.

se quiser ir mais longe faz assim:

public class Pessoa{
       private Documento d;
}

public class Documento{

}

public class DocumentoFisica extends Documento{

//atributos

}

public class DocumentoJuridica extends Documento{

//atributos

}

public class Cliente extends Pessoa{

}

Nesse caso qualquer cliente, vendedor, fornecedor etc que estendam ‘Pessoa’ poderão ter um documento que seja para pessoa física OU jurídica.

espero que tenha sido claro.

[]s