Minha dúvida é a seguinte: quando é feito a pergunta "Para que o código do main volte a compilar, troque o new Conta() por new ContaCorrente(). Se não podemos dar new em Conta, qual é a utilidade de ter um método que recebe uma referência a Conta como argumento? Aliás, posso ter isso?"
o que eu entendi é que eu devo trocar o meu código que estava assim:
Conta c = new Conta();
por este:
Conta c = new ContaCorrente();
O código funciona, mas não entendi qual a sua aplicação, qual a vantagem de ter uma conta do que é uma contacorrente mas não tem acesso aos seus comportamentos?