Bom dia, Bruno! Como vai?
Esse é sim o canal mais do que correto para trazer esse tipo de coisa!
Gostei bastante do seu projeto, dá para ver todo o cuidado e carinho que você teve durante o desenvolvimento. Agora, sobre as sugestões de melhoria, deixarei algumas contribuições, todas elas são na classe Main.
No seguinte trecho de código: Audio audio = new Audio(); você cria a instância de Audio, mas não a usa em nenhum outro momento, o que acaba sendo desnecessário para o código.
Você tem muitas chamadas de métodos que se repetem, por exemplo, a estrutura:
musica.curtir(1000);
musica.reproduzir(2000);
musica.exibeFichaTecnica();
Ela se repete mais uma vez, seria interessante criar um método para abstrair isso. Nesse método, você receberia tanto o objeto Musica quanto os valores de curtir e reporduzir:
public static void processarMusica(Musica musica, int curtidas, int reproducoes) {
musica.curtir(curtidas);
musica.reproduzir(reproducoes);
musica.exibeFichaTecnica();
}
Musica musica1 = new Musica("Legend", "Drake", 2.5);
processarMusica(musica1, 1000, 2000);
Assim você deixa o seu código mais limpo e de fácil interpretação do que está acontecendo, e em outros contextos você já está assegurando que a lógica está escondida da camada mais externa, o que é e será muito importante daqui para frente.
No mais, espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.