Problema com metodo

Boa noite pessoal, estou desenvolvendo um pequeno programa para transaçoes bancarias que foi proposto em uma atividade. Ja fiz quase tudo que foi proposto porem estou tendo dificuldade para implementar o metodo para mostrar extratos.

Como eu poderia obter o extratos dos saques, depositos e transferencias ?

Codigo:

Classe Banco:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Banco {

public static void main(String[] args) {
        
HashMap<Integer, ContaCorrente> listaContas = new HashMap<Integer, ContaCorrente>();  

Scanner teclado = new Scanner(System.in);

ContaCorrente conta1 = new ContaCorrente(001);
ContaCorrente conta2 = new ContaCorrente(002);

listaContas.put(001,conta1);
listaContas.put(002,conta2);
                


 
    System.out.println("=============== BANCO ================");
    
    int contador = 1;
    while(contador == 1){
        
    
    
    System.out.println("Digite a opção desejada: ");  
    System.out.println("1-Abriar conta");
    System.out.println("2-Fechar conta");
    System.out.println("3-Saldo");
    System.out.println("4-Saque");
    System.out.println("5-Deposito");
    System.out.println("6-Extrato");
    System.out.println("7-Transferencia");
    System.out.println("8-Fechar menu");
    System.out.print("Opção: ");
    int r = teclado.nextInt();
    
        if(r == 1){
            
            conta1.abrirConta();
            
        }else if(r == 2){
            
            conta1.fecharConta();
            
        }else if(r == 3){
            
            conta1.mostrarSaldo();
            
        }else if(r == 4){
            
            System.out.print("Digite o valor que deseja sacar: ");
            float valorSaque = teclado.nextFloat();
            
            conta1.sacar(valorSaque);
            
        }else if(r == 5){
            
            System.out.print("Digite o valor que deseja depositar: ");
            float valorDep = teclado.nextFloat();
            
            conta1.depositar(valorDep);
            
        }else if(r == 6){
            
            conta1.mostrarExtrato();
            
        }else if(r == 7){
            
            System.out.print("Digite o numero da conta destino: ");
            int cdestino = teclado.nextInt();
            System.out.print("Digite o valor da transferencia: ");
            float valorTransf = teclado.nextFloat();
            
            if(conta1.getSaldoConta() >= valorTransf){
                
                ContaCorrente obj = listaContas.get(cdestino);
                conta1.setSaldoConta(conta1.getSaldoConta() - valorTransf);
                obj.setSaldoConta(obj.getSaldoConta()+ valorTransf);
                System.out.println("Transferencia realizada com sucesso");
                
                System.out.println("Saldo conta1: "+conta1.getSaldoConta());
                System.out.println("Saldo conta2: "+conta2.getSaldoConta());
                
                
            }else{
                
                System.out.println("Saldo insuficiente");
                
            }
        }

        
        System.out.print("Deseja outro serviço?: 1-Sim 2-Nao:");
        contador = teclado.nextInt();
    }
    
    
}       

}

Classe Conta Corrente:

public class ContaCorrente {

private long numConta;
private float saldoConta;
private boolean contaEspecial;
private float limiteSaque;
private String tipoMovimentacao;
private String statusConta;


public ContaCorrente(int conta){

    this.setNumConta(conta);
    this.setSaldoConta(0);
    this.setContaEspecial(false);
    this.setLimiteSaque(0);
    this.setStatusConta("Aberta");


  }

public void abrirConta(){
 
    this.setNumConta(this.getNumConta());
    this.setSaldoConta(50);
    this.setContaEspecial(true);
    this.setLimiteSaque(500f);
    this.setStatusConta("Aberta");
    System.out.println("Conta aberta com sucesso");

}


public void fecharConta(){

    if(this.getStatusConta()== "Aberta"){

        this.setNumConta(0);
        this.setSaldoConta(0);
        this.setContaEspecial(false);
        this.setLimiteSaque(0);
        this.setStatusConta("Fechada"); 
        System.out.println("Conta fechada com sucesso.");
    
    }else{
    System.out.println("A conta ja encontra-se fechada");
    }



}


public void mostrarSaldo(){
    System.out.println("Saldo atual: R$ "+this.getSaldoConta());
}


public void sacar(float valor){

    if(valor != 0){
    
        if(this.getSaldoConta()>= valor && this.getLimiteSaque()>= valor){
    
        this.setSaldoConta(this.getSaldoConta() - valor);
        this.setLimiteSaque(this.getLimiteSaque() - valor);
        System.out.println("Saque realizado com sucesso");
            
        }else if(this.getSaldoConta()< valor){
    
        System.out.println("Saldo insuficiente");
    
        }else if(this.getLimiteSaque() < valor && this.getLimiteSaque()!= 0){
    
        System.out.println("O valor esta acima do seu limite de saque");
    
        }else if(this.getLimiteSaque() < valor && this.getLimiteSaque() == 0){
    
        System.out.println("Limite de saque diario atingido");
    
        }    

    }else{
    System.out.println("Valor do saque nao pode ser nulo. Tente novamente");
    }

    System.out.println("Saldo: R$ "+this.getSaldoConta());
    System.out.println("Limite de saque diario: R$ "+this.getLimiteSaque());

}

public void depositar(float valor){

    if(valor !=0){
    
    this.setSaldoConta(this.getSaldoConta()+ valor);
    System.out.println("Deposito realizado com sucesso");
    System.out.println("Saldo: R$ "+this.getSaldoConta());
    System.out.println("Limite de saque diario: R$ "+this.getLimiteSaque());

    }else{
        System.out.println("Valor do deposito nao pode ser nulo. Tente novamente");
    }   

}

public void mostrarExtrato(){

}



private void setNumConta(long num){
this.numConta = num;
}

private long getNumConta(){
return this.numConta;
}

public void setSaldoConta(float saldo){
this.saldoConta = saldo;
}

public float getSaldoConta(){
return this.saldoConta;
}

private void setContaEspecial(boolean status){
this.contaEspecial = status;
}

private boolean getContaEspecial(){
return this.contaEspecial;
}

private void setLimiteSaque(float limite){

this.limiteSaque = limite;
}

private float getLimiteSaque(){
return this.limiteSaque;
}

private void setTipoMovimentacao(String tipo){

this.tipoMovimentacao = tipo;
}

private String getTipoMovimentacao(){
return this.tipoMovimentacao;
}

private void setStatusConta(String status){
this.statusConta = status;
}

private String getStatusConta(){
return this.statusConta;
}

}

Você pode usar uma lista de String dentro da classe ContaCorrente, cada vez que fizer uma operação que deseja registrar no extrato, adicione uma String correspondente ao serviço. Na hora de puxar o extrato, itere nela mostrando as Strings guardadas.

Vou tentar implementar oq vc me passou mano, obg pela ajuda.

Crie uma classe abstrata Transação.
E crie as subclasses Deposito, Saque, etc
Armazene em algum lugar uma lista de Transação.
Depois é só iterar pela lista e imprimir como quiser.

Muito obg pela ajuda galera. Se n for incomodar muito, seria possivel demonstra a solucao atraves de um exemplo de trecho de codigo ? Sou novato em Java e ainda to pegando o basico em sintaxe e POO. Agradeço desde ja.