Método de instância
Quando você modela objetos no código, cada instância de uma classe tem seus próprios dados, como nome e idade. Métodos de instância permitem que essas operações sejam executadas com base no estado particular de cada objeto — é assim que métodos como getNome() ou calcularTotal() funcionam na prática. Dominar a diferença entre método de instância e estático evita erros comuns e mantém seu código orientado a objetos coerente.
O PROBLEMA
Adicione apresentar() a Pessoa que imprime "Olá! Sou [nome], [idade] anos."
EXEMPLO
p.apresentar() → Olá! Sou Ana, 25 anos.
SOBRE O CONCEITO
Um método de instância pertence a cada objeto criado a partir da classe, podendo acessar diretamente os atributos daquele objeto via this. No exercício, o método apresentar() precisa usar o nome e a idade da pessoa específica que o chamou, como em p.apresentar(). O erro comum é declarar o método como static, o que o tornaria pertencente à classe, não à instância. Um método static não tem acesso ao this nem aos atributos não estáticos, portanto não poderia imprimir nome e idade de uma pessoa sem recebê-los como parâmetro — o que quebra a lógica de encapsulamento. Ao remover o static, o método se torna um método de instância e consegue usar this.nome e this.idade para acessar os valores do objeto que o invocou.
RESOLUÇÃO