Problema em Imprimir um ArrayList com varias classes

Preciso de ajuda com meu codigo, sou novo em java e ainda estou tentando aprender porém mesmo após pedir alguma ajuda ao professor fiquei com duvidas nisso, segue abaixo codigo:

Esta tudo no pastebin.com/ porém só posso inserir 2 links :roll_eyes:
Class Main: https://pastebin.com/muZhEsM9
Class Funcionarios " /5PEB0w09"
Class FuncionariosComissionados " /sBfdJzU2"
Class FuncionariosComissionadosBaseSalario " /BtufmMRD"
Class FuncionariosAssalariados " /GfSeNTc0"
Class FuncionariosHoristas " /1PdJWhN0"

Class PagamentoFuncionarios " /G8dterXG"

FuncionariosUI Aqui é onde está o problema o resto vou deixar só para referencia se necessário:

FuncionariosUI

package ui;
import java.util.ArrayList;
import java.util.Scanner;

import funcionarios.Funcionario;
import funcionarios.FuncionarioAssalariado;
import funcionarios.FuncionarioComissionado;
import funcionarios.FuncionarioComissionadoBaseSalario;
import funcionarios.FuncionarioHorista;

public class FuncionariosUI {
public static Scanner teclado;
private ArrayList Lista;
private boolean quit = false;

public FuncionariosUI(){
	teclado = new Scanner(System.in);
	Lista = new ArrayList<Funcionario>();
}	

public void menu(){
	do {
	System.out.println("\n----Menu----\n");
	System.out.println("Escolha a opção desejada:");
	System.out.println("[1]Criar Novo Funcionario \n[2]Consultar Metodos de Pagamento\n"
			+ "[3]Consultar Funcionarios\n[4]Sair");
	switch(teclado.nextInt()){
	case 1:
		criaFuncionario();
		break;
	case 2:
		consultaPagamentos();
		break;
	case 3:
		System.out.println("---- Consultar Funcionarios ----");
		break;
	case 4:
		System.out.println("Sair!");
		quit = true;
		break;
	}
	}while(quit == false);
}

private void consultaPagamentos() {
	System.out.println("---- Consultar Metodos de Pagamento ----\n");
	System.out.println("Escolha o tipo do Funcionario que deseja consultar:");
	System.out.println("[1]Funcionarios Comissionados \n[2]Funcionarios Comissionados com Salario"
			+ "\n[3]Funcionarios Assalariados \n[4]Funcionarios Horistas \n[0]Sair");
	consultaPagamentos(teclado.nextInt());
}

private void criaFuncionario() {
	System.out.println("---- Criar Novo Funcionario ----\n");
	System.out.println("Escolha o tipo do Funcionario:");
	System.out.println("[1]Funcionario Comissionado \n[2]Funcionario Comissionado com Salario"
			+ "\n[3]Funcionario Assalariado \n[4]Funcionario Horista \n[0]Sair");
	criaFuncionarioNovo(teclado.nextInt());
}

public void criaFuncionarioNovo(int menu) {
	switch(menu){
		case 1:
			System.out.println("Funcionario Comissionado...\n");
			criaFuncionarioComissionado();
			break;
		case 2:
			System.out.println("Funcionario Comissionado com salario Base\n");
			criaFuncionarioComissionadoSalario();
			break;
		case 3:
			System.out.println("Funcionario Assalariado\n");
			criaFuncionarioAssalariado();
			break;
		case 4:
			System.out.println("Funcionario Horista\n");
			criaFuncionarioHorista();
			break;
		case 0:
			System.out.println("Sair!\n");
			break;
		default:
			System.out.println("Opção Invalida!");
	}
	
}

private void criaFuncionarioComissionado() {
	System.out.println("---- Criar Funcionario Comissionado ---- \n");
	System.out.println("Digite o nome do novo funcionario Comissionado");
	teclado.next();
	String nome = teclado.toString();
	System.out.println("Digite o CPF do funcionario novo...");
	teclado.next();
	String CPF = teclado.toString();
	System.out.println("Digite o valor da comissao do funcionario novo...");
	double comissao = teclado.nextDouble();
	System.out.println("Digite o percentual sobre as vendas do funcionario novo...");
	double percentual = teclado.nextDouble();
	Lista.add(new FuncionarioComissionado(nome, CPF, comissao, percentual));
	System.out.println("Funcionario Criado!");
}
private void criaFuncionarioComissionadoSalario(){
	System.out.println("---- Criar Funcionario Comissionado Assalariado ---- \n");
	System.out.println("Digite o nome do novo funcionario Comissionado Assalariado");
	teclado.next();
	String nome = teclado.toString();
	System.out.println("Digite o CPF do funcionario novo...");
	teclado.next();
	String CPF = teclado.toString();
	System.out.println("Digite o valor da comissao do funcionario novo...");
	double comissao = teclado.nextDouble();
	System.out.println("Digite o percentual sobre as vendas do funcionario novo...");
	double percentual = teclado.nextDouble();
	System.out.println("Digite o valor do salario do funcionario novo...");
	double salario = teclado.nextDouble();
	Lista.add(new FuncionarioComissionadoBaseSalario(nome, CPF, comissao, percentual, salario));
	System.out.println("Funcionario Criado!");
}
private void criaFuncionarioAssalariado(){
	System.out.println("---- Criar Funcionario Assalariado ---- \n");
	System.out.println("Digite o nome do novo funcionario assalariado.");
	teclado.next();
	String nome = teclado.toString();
	System.out.println("Digite o CPF do funcionario novo...");
	teclado.next();
	String CPF = teclado.toString();
	System.out.println("Digite o Salario do funcionario novo...");
	double salario = teclado.nextDouble();
	Lista.add(new FuncionarioAssalariado(nome, CPF, salario));
	System.out.println("Funcionario Criado!");
}
private void criaFuncionarioHorista(){
	System.out.println("---- Criar Funcionario Horista ---- \n");
	System.out.println("Digite o nome do novo funcionario horista.");
	teclado.next();
	String nome = teclado.toString();
	System.out.println("Digite o CPF do funcionario novo...");
	teclado.next();
	String CPF = teclado.toString();
	System.out.println("Digite o Salario por hora do funcionario novo...");
	double salarioPorHora = teclado.nextDouble();
	System.out.println("Digite quantidade total de horas trabalhas pelo funcionario...");
	double horasTrabalhadas = teclado.nextDouble();
	Lista.add(new FuncionarioHorista(nome, CPF, salarioPorHora, horasTrabalhadas));
	System.out.println("Funcionario Criado!");
}
	
public void consultaPagamentos(int menu){
	switch(menu) {
		case 1:		
			System.out.println("Funcionarios Comissionados");
			System.out.println("O pagamento dos funcionarios comissionados é feito através"
								+ " da comissão vezes o percentual de vendas.");
			break;
		case 2:
			System.out.println("Funcionarios Comissionados com Salario Base");
			System.out.println("O pagamento dos funcionarios comissionados com salario base "
					+ "é a soma	da comissão vezes o percentual de vendas, com o salario mensal.");
			break;
		case 3:
			System.out.println("Funcionarios Assalariados");
			System.out.println("O pagamento dos funcionarios assalariados é feito"
								+ " semanalmente pelo salario previamente acordado.");
			break;
		case 4:
			System.out.println("Funcionarios Horistas");
			System.out.println("O pagamento dos funcionarios horistas é calculado de acordo com"
					+ " as horas trabalhadas, se o funcionario trabalhou menos de 40 horas "
					+ "semanais, é o Salario por hora vezes as horas trabalhadas, porém,"
					+ " se trabalhou mais de 40 horas semanais, as horas "
					+ "adicionais recebem adicional de 50%.");
			break;
		case 0:
			System.out.println("Sair!");
			break;
		default:
			System.out.println("Opção Invalida!");
	}
}

public void consultaCadastros(){
	for(int i = 0;i<Lista.size();i++){
		Funcionario f = Lista.get(i);
		System.out.println("Nome: "+ f.getNome());
		System.out.println("CPF: " + f.getCPF());
		if (f instanceof FuncionarioComissionado){
			System.out.println("Percentual: " + ((FuncionarioComissionado)f).getPercentual());
			System.out.println("Comissão: " + ((FuncionarioComissionado)f).getComissao());
		}
		if (f instanceof FuncionarioComissionadoBaseSalario){
			System.out.println("Percentual: " + ((FuncionarioComissionadoBaseSalario)f).getPercentual());
			System.out.println("Salario Base: " + ((FuncionarioComissionadoBaseSalario)f).getSalario());
			System.out.println("Comissão: " + ((FuncionarioComissionadoBaseSalario)f).getComissao());
		}
		if (f instanceof FuncionarioAssalariado){
			System.out.println("Salario: " + ((FuncionarioAssalariado)f).getSalario());
		}
		if (f instanceof FuncionarioHorista){
			System.out.println("Horas Trabalhadas: " + ((FuncionarioHorista) f).getHorasTrabalhadas());
			System.out.println("Salario Hora: " + ((FuncionarioHorista) f).getSalarioHora());
		}
	}
}

O problema está no ultimo metodo (Public Void ConsultaCadastro() {})

Boa noite
Poderia informar o erro?

simplesmente não mostra nada, deve ser algo muito trivial que esqueci porem ja quebrei a cabeça procurando e nao acho.

Boa noite
Observando seu código percebi o seguinte:

  1. Quando cria um funcionário está utilizando o seguinte código:

teclado.next();
String nome = teclado.toString();

Poderia utilizar assim, pois da forma acima (toString) gerar sujeira na captura dos dados quando tenta mostrar pela opção 3 do menu:

String nome = teclado.next();

  1. No “public void consultaCadastros() {” está utilizando:

Funcionario f = Lista.get(i);

Mas está faltando o tipo de elemento para a Lista na sua variável declarada no início do código:

private ArrayList<Funcionario> Lista;

Teste aí por favor.

Opa ajustei o que falou mas não entendi a ultima parte, sou meio juvenil em programação ainda. O que seria o elemento do arraylist?
desculpe demora

Boa noite
O ArrayList é uma classe utilizada para armazenar grupo de objetos, para os quais pretende trabalhar, definindo-se o tipo de elemento que utilizará.
No seu caso, o armazenamento é realizado através da sua classe Funcionario onde tem os getters e setters para as variáveis nome e CPF, extendida para as outras classes de tipos de Funcionario que criou.
Depois você recupera os dados pelo método consultaCadastros através de uma chamada de classe Funcionario (criando um objeto f) e atribuindo a ele uma Lista por ArrayList (criada no início de sua classe FuncionarioUI) que neste caso precisa de um tipo de elemento compatível com o que está trabalhando.
Motivo pelo qual a variável

private ArrayList Lista;

precisa ser escrita como:

private ArrayList<Funcionario> Lista;

para que a Lista.get(i) seja compatível e os dados possam ser recuperados pelo

Funcionario f = Lista.get(i);

Observe que, as coleções usadas pelo ArrayList tem outras opções de tipos de elementos e métodos para tratamento dos elementos no grupo de objetos.

Consegui fazer isso e algumas alterações junto com professor, porém continuou não funcionando :confused:

FuncionariosUI

package ui;
import java.util.ArrayList;
import java.util.Scanner;

import funcionarios.Funcionario;
import funcionarios.FuncionarioAssalariado;
import funcionarios.FuncionarioComissionado;
import funcionarios.FuncionarioComissionadoBaseSalario;
import funcionarios.FuncionarioHorista;

public class FuncionariosUI {
public static Scanner teclado;
private ArrayList <Funcionario> Lista; // está o elemento porém no site não aparece por algum motivo
private boolean quit = false;

public FuncionariosUI(){
	teclado = new Scanner(System.in);
	Lista = new ArrayList<Funcionario>();
}	

public void menu(){
	do {
	System.out.println("\n----Menu----\n");
	System.out.println("Escolha a opção desejada:");
	System.out.println("[1]Criar Novo Funcionario \n[2]Consultar Metodos de Pagamento\n"
			+ "[3]Consultar Funcionarios\n[4]Sair");
	switch(teclado.nextInt()){
	case 1:
		criaFuncionario();
		break;
	case 2:
		consultaPagamentos();
		break;
	case 3:
		System.out.println("---- Consultar Funcionarios ----");
		break;
	case 4:
		System.out.println("Sair!");
		quit = true;
		break;
	}
	}while(quit == false);
}

private void consultaPagamentos() {
	System.out.println("---- Consultar Metodos de Pagamento ----\n");
	System.out.println("Escolha o tipo do Funcionario que deseja consultar:");
	System.out.println("[1]Funcionarios Comissionados \n[2]Funcionarios Comissionados com Salario"
			+ "\n[3]Funcionarios Assalariados \n[4]Funcionarios Horistas \n[0]Sair");
	consultaPagamentos(teclado.nextInt());
}

private void criaFuncionario() {
	System.out.println("---- Criar Novo Funcionario ----\n");
	System.out.println("Escolha o tipo do Funcionario:");
	System.out.println("[1]Funcionario Comissionado \n[2]Funcionario Comissionado com Salario"
			+ "\n[3]Funcionario Assalariado \n[4]Funcionario Horista \n[0]Sair");
	criaFuncionarioNovo(teclado.nextInt());
}

public void criaFuncionarioNovo(int menu) {
	switch(menu){
		case 1:
			System.out.println("Funcionario Comissionado...\n");
			criaFuncionarioComissionado();
			break;
		case 2:
			System.out.println("Funcionario Comissionado com salario Base\n");
			criaFuncionarioComissionadoSalario();
			break;
		case 3:
			System.out.println("Funcionario Assalariado\n");
			criaFuncionarioAssalariado();
			break;
		case 4:
			System.out.println("Funcionario Horista\n");
			criaFuncionarioHorista();
			break;
		case 0:
			System.out.println("Sair!\n");
			break;
		default:
			System.out.println("Opção Invalida!");
	}
	
}

private void criaFuncionarioComissionado() {
	System.out.println("---- Criar Funcionario Comissionado ---- \n");
	System.out.println("Digite o nome do novo funcionario Comissionado");
	String nome = teclado.next();
	System.out.println("Digite o CPF do funcionario novo...");
	String CPF = teclado.next();
	System.out.println("Digite o valor da comissao do funcionario novo...");
	double comissao = teclado.nextDouble();
	System.out.println("Digite o percentual sobre as vendas do funcionario novo...");
	double percentual = teclado.nextDouble();
	Lista.add(new FuncionarioComissionado(nome, CPF, comissao, percentual));
	System.out.println("Funcionario Criado!");
}
private void criaFuncionarioComissionadoSalario(){
	System.out.println("---- Criar Funcionario Comissionado Assalariado ---- \n");
	System.out.println("Digite o nome do novo funcionario Comissionado Assalariado");
	String nome = teclado.next();
	System.out.println("Digite o CPF do funcionario novo...");
	String CPF = teclado.next();
	System.out.println("Digite o valor da comissao do funcionario novo...");
	double comissao = teclado.nextDouble();
	System.out.println("Digite o percentual sobre as vendas do funcionario novo...");
	double percentual = teclado.nextDouble();
	System.out.println("Digite o valor do salario do funcionario novo...");
	double salario = teclado.nextDouble();
	Lista.add(new FuncionarioComissionadoBaseSalario(nome, CPF, comissao, percentual, salario));
	System.out.println("Funcionario Criado!");
}
private void criaFuncionarioAssalariado(){
	System.out.println("---- Criar Funcionario Assalariado ---- \n");
	System.out.println("Digite o nome do novo funcionario assalariado.");
	String nome = teclado.next();
	System.out.println("Digite o CPF do funcionario novo...");
	String CPF = teclado.next();
	System.out.println("Digite o Salario do funcionario novo...");
	double salario = teclado.nextDouble();
	Lista.add(new FuncionarioAssalariado(nome, CPF, salario));
	System.out.println("Funcionario Criado!");
}
private void criaFuncionarioHorista(){
	System.out.println("---- Criar Funcionario Horista ---- \n");
	System.out.println("Digite o nome do novo funcionario horista.");
	String nome = teclado.next();
	System.out.println("Digite o CPF do funcionario novo...");
	String CPF = teclado.next();
	System.out.println("Digite o Salario por hora do funcionario novo...");
	double salarioPorHora = teclado.nextDouble();
	System.out.println("Digite quantidade total de horas trabalhas pelo funcionario...");
	double horasTrabalhadas = teclado.nextDouble();
	Lista.add(new FuncionarioHorista(nome, CPF, salarioPorHora, horasTrabalhadas));
	System.out.println("Funcionario Criado!");
}
	
public void consultaPagamentos(int menu){
	switch(menu) {
		case 1:		
			System.out.println("Funcionarios Comissionados");
			System.out.println("O pagamento dos funcionarios comissionados é feito através"
								+ " da comissão vezes o percentual de vendas.");
			break;
		case 2:
			System.out.println("Funcionarios Comissionados com Salario Base");
			System.out.println("O pagamento dos funcionarios comissionados com salario base "
					+ "é a soma	da comissão vezes o percentual de vendas, com o salario mensal.");
			break;
		case 3:
			System.out.println("Funcionarios Assalariados");
			System.out.println("O pagamento dos funcionarios assalariados é feito"
								+ " semanalmente pelo salario previamente acordado.");
			break;
		case 4:
			System.out.println("Funcionarios Horistas");
			System.out.println("O pagamento dos funcionarios horistas é calculado de acordo com"
					+ " as horas trabalhadas, se o funcionario trabalhou menos de 40 horas "
					+ "semanais, é o Salario por hora vezes as horas trabalhadas, porém,"
					+ " se trabalhou mais de 40 horas semanais, as horas "
					+ "adicionais recebem adicional de 50%.");
			break;
		case 0:
			System.out.println("Sair!");
			break;
		default:
			System.out.println("Opção Invalida!");
	}
}

public void consultaCadastros(){
	for(int i = 0;i<=Lista.size();i++){
		Funcionario f = Lista.get(i);
		System.out.println("Nome: "+ f.getNome());
		System.out.println("CPF: " + f.getCPF());
		if (f instanceof FuncionarioComissionado){
			System.out.println("Percentual: " + ((FuncionarioComissionado)f).getPercentual());
			System.out.println("Comissão: " + ((FuncionarioComissionado)f).getComissao());
		}
		if (f instanceof FuncionarioComissionadoBaseSalario){
			System.out.println("Percentual: " + ((FuncionarioComissionadoBaseSalario)f).getPercentual());
			System.out.println("Salario Base: " + ((FuncionarioComissionadoBaseSalario)f).getSalario());
			System.out.println("Comissão: " + ((FuncionarioComissionadoBaseSalario)f).getComissao());
		}
		if (f instanceof FuncionarioAssalariado){
			System.out.println("Salario: " + ((FuncionarioAssalariado)f).getSalario());
		}
		if (f instanceof FuncionarioHorista){
			System.out.println("Horas Trabalhadas: " + ((FuncionarioHorista) f).getHorasTrabalhadas());
			System.out.println("Salario Hora: " + ((FuncionarioHorista) f).getSalarioHora());
		}
	}
}

}

bom dia!
Há um sinal de igual no laço for (diferente do seu código original) que, gera um estouro da lista.

for (int i = 0; i <= Lista.size(); i++) {

corrige para:

for (int i = 0; i < Lista.size(); i++) {

Para que o código apareça corretamente na lista selecione o trecho do código e clique no ícone </> na barra do editor de mensagem e depois no ícone do bloco de citação para separar seu texto do código.

private ArrayList<Funcionario> Lista;

Mesmo fazendo estas alterações não funcionou, tentarei ver novamente em aula com os professores caso eu consiga a resposta posto aqui. Agradeço a ajuda :heart:

Boa noite
Aqui rodou sem problemas.
Confere seu código a partir do original com as alterações sugeridas.