1
resposta

[Dúvida] Resolvendo loop

Como seria uma boa forma (sem gambiarra) de resolver o loop? Seria chamando o método a própria classe A? Tipo A.metodo2(); ? Ai tornar esse metodo2 estático para poder acessar sem instância, ou seria melhor criar uma instância de A dentro do método2? O que seria a melhor prática?

1 resposta

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!