Olá Julio, tudo bem?
Seu caso é um pouco sutil, mas vou tentar explicar o que acontece.
Quando você fez essa parte do seu código abaixo:
List<Aula> aulas = novoCurso.getAulas();
List<Aula> aula2 = novoCurso.getAulas();
Significa que tanto a lista aulas quanto a lista aula2 estão apontando para a lista de aulas do objeto novoCurso.
Ao adicionar uma aula em uma das duas listas como você fez:
novoCurso.adiciona(aula2, new Aula("dominando arrays", 21));
Na verdade o que ocorreu foi que , mesmo que indiretamente, você adicionou uma aula na lista de aulas do objeto novoCurso, pois no inicio voce referenciou a lista deste objeto nas duas listas criadas.
Se você alterar o seu exemplo e adicionar na outra lista:
novoCurso.adiciona(aulas, new Aula("dominando arrays", 21));
Vai perceber que o resultado será o mesmo, porque na realidade voce está adicionando na lista do curso e não da lista que o referencia. E como ambas estão referenciando a lista do mesmo objeto novoCurso, ao imprimir o conteúdo de ambas, sempre será igual. Acho que sua dúvida está relacionada mais sobre referência à objetos.
Para ter o efeito que você esperava, voce deveria fazer algo parecido com o seguinte:
List<Aula> aulas = new ArrayList<Aula>();
List<Aula> aula2 = new ArrayList<Aula>();
aulas.addAll(novoCurso.getAulas());
aula2.addAll(novoCurso.getAulas());
Desta forma , voce estaria preenchendo as listas com as listas do curso, e não apenas referenciando ela.
Se executar agora o seu método adiciona:
novoCurso.adiciona(aulas, new Aula("dominando arrays", 21));
Verá que apenas a lista escolhida terá o novo curso adicionado, pois agora elas são listas independentes.
[Aula: dominando arrays, 21 minutos]
[]
Espero ter sido claro e tenha conseguido sanar sua dúvida.
Mais sobre o assunto pode ser visto aqui.
Abraços