Cadastro simples de funcionário / estudante

Voltei a programar recentemente e acabei pegando alguns exemplos de uma postagem daqui para praticar, mas estou com dificuldades em retornar o que foi gravado, sei que deve ser um detalhe bem simples, mas … se puderem ajudar ficarei muito grato, seguem as classes abaixo.

public class CadastroPrincipal {
	public static void main(String[] args){
		InterfaceCadastro interfaceCadastro = new InterfaceCadastro();
		interfaceCadastro.IntefaceCadastro();

	}
}

import java.util.Scanner;

public class InterfaceCadastro {

	private Scanner scanner;

	public void IntefaceCadastro(){
		
		int op = 0;
		scanner = new Scanner(System.in);

		System.out.println("Opções: \n1 Cadastrar \n2 Listar \n3 Sair");
		op = scanner.nextInt();


		if (op == 1){
			Cadastrar cadastrarUsuario = new Cadastrar();
			cadastrarUsuario.CadastrarUsuarios(op);
		}else if(op == 2){
			Listar listarUsuarios = new Listar();
			listarUsuarios.ListarUsuarios();
		}else if(op == 3){
			System.exit(0);
		}else{
			System.out.println("Opção Inválida");
		}
	}

}

import java.util.ArrayList;
import java.util.Scanner;
public class Cadastrar {

	Scanner scanner = new Scanner(System.in);
	InterfaceCadastro retornocadastro = new InterfaceCadastro();

	Usuario usuario = new Usuario();
	ArrayList<Usuario> listaDeUsuarios = new ArrayList<Usuario>();


	public void CadastrarUsuarios(int op){

		while(op != 0){

			System.out.println("Digite o nome do Funcionario");
			usuario.setNome(scanner.next());

			/*System.out.println("Digite o cargo ");
			usuario.setCargo(scanner.next());

			System.out.println("Digite o login");
			usuario.setLogin(scanner.next());

			System.out.println("Digite a senha");
			usuario.setLogin(scanner.next());*/

			listaDeUsuarios.add(usuario);
			usuario = new Usuario();
			
			System.out.println("\nCadastro efetuado com sucesso!! \n1 Novo Cadastro \n0 Voltar ao menu");
			op = scanner.nextInt();
		}

		retornocadastro.IntefaceCadastro();

	}

}

public class Usuario {

	private String nome, login, cargo;
	private int senha;
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getCargo() {
		return cargo;
	}
	public void setCargo(String cargo) {
		this.cargo = cargo;
	}
	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}
	public int getSenha() {
		return senha;
	}
	public void setSenha(int senha) {
		this.senha = senha;
	}


}

import java.util.ArrayList;

public class Listar {
	
	InterfaceCadastro retornocadastro = new InterfaceCadastro();
	
	Usuario usuario = new Usuario();
	ArrayList<Usuario> listaDeUsuarios = new ArrayList<Usuario>();

	
	public void ListarUsuarios(){
		
		if(listaDeUsuarios.size() == 0){
			System.out.println("Não há registros \n");
		}else {
			System.out.println("\nLista de Cadastros\n");
			for (int i = 0; i < listaDeUsuarios.size(); i++) {
				Usuario d = listaDeUsuarios.get(i);
				System.out.println("Cadastro número: " + i);
				System.out.println("\tNome: " + d.getNome());
				/*System.out.println("\tLogin: " + d.getLogin());
				System.out.println("\tCargo: " + d.getCargo() + "\n");*/
			}
			System.out.println("\nFim da lista\n");
		}
		
		retornocadastro.IntefaceCadastro();
	}

}

Seu método CadastrarUsuarios(int op) vai entrar em loop.

Antes de usar você está testando se “op” é igual a 1, certo?
Depois você usa o método, dentro dele tem “while(op != 0)”, se o valor de “op” é igual a 1, ele será sempre diferente de zero, seu while estará dessa forma: “while(true)”…

Daí pra frente parei de ler o código, mas qual exatamente o seu problema?

Boa tarde Fael
Muito Obrigado pela atenção, mas voltando ao tópico, meu problemas esta na classe listar que retorna null, esta classe esta retornando o cadastro no teste Syso no final da classe, infelizmente quando tento listar o que foi gravado o sistema não retorna, sei que isso deve ser bem simples, mas não consigo ver o erro. Novamente muito obrigado.