Usando o metodo toString e Polimorfismo no Java

Como eu faço para imprimir o nome do aluno e seus cursos na opção 2 desse menu: no caso quando o usuário cadastrar o aluno e seus cursos, quando ele escolher a oçção zero do submenu, o programa terá que apresentar o nome do aluno e seus cursos. Está rodando, mas não está aparecendo o conteúdo do objeto.

import java.util.ArrayList;
import java.util.Scanner;

public class Principal {

public static void apresentarMenu(){

    System.out.println("[1] Consultar dados de uma pessoa");
    System.out.println("[2] Cadastrar novo aluno");
    System.out.println("[3] Cadastrar novo professor");
    System.out.println("[4] Consultar novo administrativo");
    System.out.println("[0] Sair");
    System.out.print("Informe a opçao desejada:");
}


public static void apresentaSubMenu(){
    System.out.println("[1] Inserir novo curso");
    System.out.println("[0] Finalizar");
    System.out.print("Informe a opçao desejada:");
}


public static void main(String[] args) {

    Aluno aluno = null;
    ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();
    Scanner input = new Scanner(System.in);
    String op = "1";

    while (op != "0"){

        apresentarMenu();
        op = String.valueOf(input.nextInt());

        switch (op){
            case "1":
                System.out.print("Informe a matricula");
                String mat = input.next();
                //connsultar os dados do aluno
                break;

            case "2":
                System.out.println("Informe o nome do aluno");
                String nome = input.next();

                System.out.println("Informe o CPF do aluno");
                String cpf = input.next();

                System.out.println("Informe a matricula do aluno");
                String matricula = input.next();

                apresentaSubMenu();
                int opsubmenu = input.nextInt();

                while (opsubmenu != 0){

                    if (opsubmenu == 1) {
                        System.out.println("Informe o nome do curso:");
                        String nomecurso = input.next();

                        System.out.println("Informe a carga horária do curso");
                        int horacurso = input.nextInt();

                        aluno = new Aluno(nome, cpf, matricula, nomecurso, horacurso);
                        apresentaSubMenu();
                        opsubmenu  = input.nextInt();
                    }
                }

                if (opsubmenu == 0){
                    pessoas.add(aluno);
                    for (Pessoa currentPessoa : pessoas ){

                        Aluno pessoa = (Aluno) currentPessoa;
                        System.out.println(currentPessoa.toString());
                    }

                }
                break;
        }
    }

Essa linha…

Aluno pessoa = (Aluno) currentPessoa;
System.out.println(currentPessoa.toString());

Tente assim…

Aluno pessoa = (Aluno) currentPessoa;
System.out.println(pessoa);

E confira se o toString na classe Aluno está assim…

public String toString() {
    return this.getNome();
}

O System.out.println() irá chamar o toString internamente…

Então, no caso na classe Aluno, o toString () está assim:

@Override
public String toString(){

    return String.format("Os alunos são",super.toString(),"Os cursos são:",getcursos());

}

A classe Pessoa é uma super classe, e Aluno herda dela.

Para ficar mais claro, segue a classe Pessoa e Aluno

public abstract class Pessoa {

    private final String nome;
    private final String cpf;
    private final String matricula;

    //construtor
    public Pessoa (String nome, String cpf, String matricula) {
        this.nome = nome;
        this.cpf = cpf;
        this.matricula = matricula;
    }


    public String getNome(){
        return nome;
    }

    public String getCpf(){
        return cpf;
    }

    public String getMatricula (){
        return matricula;
    }

    @Override
    public String toString(){
        return String.format("%s %s%nInformações da Pessoa: %s", getNome(), getCpf(), getMatricula());
    }

}

======

import java.util.ArrayList;

public class Aluno extends Pessoa {

    private ArrayList<Curso> cursos = new ArrayList<Curso>();


    //construtor
    public Aluno (String nome, String cpf, String matricula,String nome_curso, int horas_curso){

        super(nome,cpf,matricula); //construtor da superclasse
        addCursoAluno(nome_curso,horas_curso);
    }


    public void addCursoAluno (String nome_curso, int horas_curso){
        Curso c = new Curso(nome_curso,horas_curso);
        cursos.add(c);
    }

    public ArrayList<Curso> getcursos (){
        return cursos;
    }

    @Override
    public String toString(){

        return String.format("Os alunos são",super.toString(),"Os cursos são:",getcursos());

    }


}