Excelente código para uma primeira classe de exemplo!
Gostei muito da forma como você estruturou as chamadas no método main:
Organização Lógica: O main está limpo, instanciando as classes (Perfil, Estudos, Soma) e chamando os métodos delas sequencialmente. Isso demonstra um bom entendimento do fluxo de execução.
Demonstração de Conceitos: Você cobriu conceitos fundamentais de POO:
Criação de instâncias (new).
Chamada de métodos em objetos.
Definição de métodos auxiliares (mesmo que sejam estáticos, estão ali para ilustrar funcionalidades).
Observação sobre os métodos estáticos:
Notei que você definiu exibirMsg(), meuEstudo(), e minhaSoma() como estáticos (linhas 15, 22, 29).
No seu main (linhas 5, 8, 11), você está chamando-os via instâncias (perfil.exibirMsg(), estudos.meuEstudo(), soma.minhaSoma()).
Se os métodos são static, eles pertencem à classe, não à instância, e deveriam ser chamados diretamente pela classe (ex: PrimeiraClasse.exibirMsg()).
Para este exemplo, você tem duas opções:
Manter os métodos estáticos e mudar a chamada no main:
// Linhas 5, 8, 11
PrimeiraClasse.exibirMsg();
PrimeiraClasse.meuEstudo();
PrimeiraClasse.minhaSoma();
Remover a palavra static dos métodos auxiliares: Assim, eles se tornam métodos de instância, e a chamada via objeto (perfil.exibirMsg()) fica corretíssima.
Independentemente disso, o código está claro e cumpre o papel de mostrar como o programa se inicia e interage com outras partes. Parabéns!