Dúvida - Cadastro de funcionário e cliente

Bom dia galera!

Estou tentando fazer um exercício do treinamento de Java que estou cursando.

O exercício é basicamente construir um programa que cadastre CLIENTE ou FUNCIONÁRIO, consultar e excluir.

É para formar a seguinte tela:

Opções
(1) Cadastrar Clientes
(2) Cadastrar funcionários
(3) Pesquisar Clientes
(4) Pesquisar funcionários
(5) Excluir Clientes
(6) Excluir funcionário
(0) Sair
Digite sua opção:

No exercício cita que é para construir somente um Array, mas é ai que está minha dúvida. Temos a classe Pessoa, Cliente e Funcionário…o Array seria do tipo PESSOA, como fariamos para listar os atributos de FUNCIONARIOS e CLIENTES numa mesma lista???

É mais viável criar duas listas? (Uma para CLIENTE -do tipo cliente- e outra para FUNCIONARIO -do tipo funcionario-?

Abaixo o código para que vocês possam entender melhor:

CLASSE PESSOA

[code]package br.com.classe;
import java.util.Scanner;
import java.util.ArrayList;

public class Pessoa {
Scanner sc = new Scanner(System.in);
private String nomePessoa, cpfPessoa;
private int idadePessoa;

ArrayList<Pessoa> cadastro = new ArrayList <Pessoa>();

public void setNomePessoa(String nomePessoa){
	this.nomePessoa=nomePessoa;
}

public String getNomePessoa(){
	return nomePessoa;
}

public String getCpfPessoa() {
	return cpfPessoa;
}

public void setCpfPessoa(String cpfPessoa) {
	this.cpfPessoa = cpfPessoa;
}

public int getIdadePessoa() {
	return idadePessoa;
}

public void setIdadePessoa(int idadePessoa) {
	this.idadePessoa = idadePessoa;
}

}[/code]

CLASSE FUNCIONÁRIO

[code]package br.com.classe;

public class Funcionario extends Pessoa {
private String numeroCarteiraTrab;
int idFuncionario;

public void setIdFuncionario(int idFuncionario){
	this.idFuncionario=idFuncionario;
}

public int getIdFuncionario(){
	return idFuncionario;
}

public String getNumeroCarteiraTrab() {
	return numeroCarteiraTrab;
}

public void setNumeroCarteiraTrab(String numeroCarteiraTrab) {
	this.numeroCarteiraTrab = numeroCarteiraTrab;
}

public void cadastroFuncionario(){
	Funcionario f1 = new Funcionario();
	
	f1.setIdFuncionario(+1);
	
	System.out.println("Digite o nome do funcionário: ");
	f1.setNomePessoa(sc.nextLine());
	
	System.out.println("Digite o CPF do funcionário");
	f1.setCpfPessoa(sc.nextLine());
	
	System.out.println("Digite a idade do funcionário: ");
	f1.setIdadePessoa(sc.nextInt());
	
	System.out.println("Digite o número da carteira de trabalho do funcionário: ");
	setNumeroCarteiraTrab(sc.next());
	
	cadastro.add(f1);
	
}
public void listarCadastro(){
	
	for(Pessoa x:cadastro){
		System.out.println(x.getNomePessoa()+ x.getIdadePessoa() + x.getCpfPessoa());
	}
	
	
	
}

}[/code]

CLASSE CLIENTE

[code]package br.com.classe;

public class Cliente extends Pessoa{
private int idCliente;
private String tipoCliente;

public int getIdCliente() {
	return idCliente;
}
public void setIdCliente(int idCliente) {
	this.idCliente = idCliente;
}
public String getTipoCliente() {
	return tipoCliente;
}
public void setTipoCliente(String tipoCliente) {
	this.tipoCliente = tipoCliente;
}

public void cadastroCliente(){
	Cliente c1 = new Cliente();
	
	c1.setIdCliente(+1);
	
	System.out.println("Digite o nome do Cliente ");
	c1.setNomePessoa(sc.nextLine());
	
	System.out.println("Digite o CPF: ");
	c1.setCpfPessoa(sc.nextLine());
	
	System.out.println("Digite a idade: ");
	c1.setIdadePessoa(sc.nextInt());
	
	
	System.out.println("Digite o tipo de cliente (pessoa juridica ou física) ");
	tipoCliente=sc.next();
	
	if(tipoCliente.equalsIgnoreCase("Juridica") || tipoCliente.equals("Física")){
		((Cliente) c1).setTipoCliente(sc.nextLine());
	}
	else{
		System.out.println("Digite apenas se é pessoa FÍSICA OU JURÍDICA");
		System.out.println("Digite o tipo de cliente (pessoa juridica ou física) ");
		tipoCliente=sc.next();
	}
	
	cadastro.add(c1);
	
	
}
public void listarCadastro(){
	
	for(Pessoa x:cadastro){
		System.out.println(x.getNomePessoa()+ x.getIdadePessoa() + x.getCpfPessoa());
	}

}

}
[/code]

CLASSE PRINCIPAL[code]package br.com.principal;
import java.util.Scanner;

import br.com.classe.*;

public class CadastroClienteFuncionario {

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	int opcao;
	Cliente c1 = new Cliente();
	Funcionario f1 = new Funcionario();
	

	
	System.out.println("***Cadastro Cliente Funcionário Curso Squadra***\n");
	
	
	System.out.println(" Digite 1 para cadastrar Funcionário ou Cliente \n Digite 2 pesquisar por um Funcionário ou Cliente \n Digite 3 para excluir \n Digite 0 para sair");
	opcao=sc.nextInt();
	while(opcao!=0){
		switch(opcao){
		
			case 1: int opc;
					
					System.out.println("Digite 1 para cadastrar um cliente ou 2 para cadastrar um funcionário: ");
					opc=sc.nextInt();
					
					if(opc==1){
						c1.cadastroCliente();
					}
					else if(opc==2){
						f1.cadastroFuncionario();
					}
					else{
						System.out.println("Opção inválida!");
					}
					break;
					
			case 2: f1.listarCadastro();
					c1.listarCadastro();
					break;
					
			
			default: System.out.println("Opção inválida");		break;
			
	
		}
		System.out.println(" Digite 1 para cadastrar Funcionário ou Cliente \n Digite 2 pesquisar por um Funcionário ou Cliente \n Digite 3 para excluir \n Digite 0 para sair");
		opcao=sc.nextInt();
	}

	
}

}[/code]

Valeu pessoa, abraços!

acho, que e exercio quer, que você faça Cliente e Funcionario extenderem (extends) Pessoa, e criar a Array do tipo pessoa; e para instanciar os objetos ultilizando o Polimorfismo, como ex:


Pessoa chico = new Funcionario();
Pessoa zé = new Cliente();

Faca um codigo polimorfico como dito anteriormente…pois a class cliente e funcionario sao pessoas …

Cara eu testei seu código aq, se vc esta querendo exibir apenas os funcionarios basta vc chamar o f1.listarCadastro(); e se vc quer exibir apenas os clientes vc tem q chamar apenas o
c1.listarCadastro(); q já irá funcionar, porem vc esta chamando os dois métodos ao mesmo tempo quando o usuario informa a opção 2 por isso esta sendo mostrado tanto os funcionarios e o clientes.

Entendi pessoal, o correto é usar o polimorfismo.

O que não estou conseguindo é na hora de listar, fazer com que a lista do tipo PESSOA enxergue os atributos especificos e CLIENTE E FUNCIONARIO.

public void cadastroFuncionario(){  
   Pessoa f1 = new Funcionario();