Olá, Maria! Sua pergunta é muito pertinente e mostra que você está realmente se aprofundando no conteúdo!
Para resolver um loop, como o apresentado no final do texto da aula/exercício, é preciso ter cuidado ao usar o this
em um método. O this
faz referência ao objeto atual, e não necessariamente à classe na qual o método está sendo definido. Portanto, se você chamar this.metodo2();
na classe A, mas o objeto é do tipo B (que estende A), o metodo2
que será chamado é o da classe B, e não o da classe A. Isso pode levar a um loop se o metodo2
na classe B chamar o super.metodo();
, que por sua vez chama this.metodo2();
.
Agora, em relação à sua pergunta sobre a chamada de métodos estáticos ou a criação de uma nova instância da classe A dentro do método2, ambas as abordagens têm suas vantagens e desvantagens, e a melhor escolha depende do contexto específico.
Se você tornar o metodo2
estático, você poderá chamá-lo sem criar uma instância da classe A. Isso pode ser útil se o metodo2
não depende de nenhum estado específico de um objeto da classe A. No entanto, métodos estáticos não podem ser sobrescritos, então se você precisar de um comportamento diferente para metodo2
em uma subclasse de A, essa não seria a melhor abordagem.
Por outro lado, se você criar uma nova instância de A dentro do metodo2
, você terá um novo objeto A com seu próprio estado, que não está relacionado a nenhum outro objeto A. Isso pode ser útil se o metodo2
precisa trabalhar com um novo, "limpo" objeto A cada vez que é chamado. No entanto, isso pode ser ineficiente se a criação de novos objetos A for uma operação cara (por exemplo, se requer muita memória ou tempo para criar um objeto A), ou se o metodo2
é chamado com frequência.
Espero ter ajudado e bons estudos!