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:
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.
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!
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);
}
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.