3
respostas

Loop infinito não compreendido

Na aula dois deste módulo, é apresentado o seguinte código :

class A{
    public void metodo() {
        System.out.println("a");
        this.metodo2();
    }
    public void metodo2() {
        System.out.println("metodo 2 do pai");
    }
}
class B extends A {
    public void metodo() {
        System.out.println("b");
        super.metodo();
    }
    public void metodo2() {
        System.out.println("c");
        metodo();
        super.metodo();
    }
    public static void main(String[] args) {
        new B().metodo2();
    }
}

e o Guilherme explicou que entra em loop infinito, pois quando estamos chamando o metodo2 que está na classe A, na verdade estamos chamando o objeto metodo2 da classe filha B, a explicação foi muito rasa para mim, não compreendi totalmente, se o metodo2 está na classe A como é e por que ele invoca o metodo2 da classe B ? e como eu faria para chamar o metodo2 da classe A ?

3 respostas

No meu entendimento não há loop infinito.

Segue como entendi o código:

1 - new B().metodo2(); Como foi dado new em B é chamado o metodo2() de B;

2 - print "c" e chamada a metodo() de B

3 - print "b" e chamada ao metodo() da classe mãe A com super.metodo()

4 - print "a" e chamada ao metodo2() de A

5 - print "metodo 2 do pai"

6 - chamada em B de super.metodo(), pois a chamada feita em 2 chegou ao fim

7 - repete-se o passo 4

8 - repete-se o passo 5

Portanto entendo que no console teríamos o seguinte "cbametodo 2 do paiametodo 2 do pai"

Qual é a situação do loop infinito? Estou errado no raciocínio?

Mateus, eu também não entendi, mas há sim o loop infinito, até estourar a pilha. se quiser faz o teste, estou tentando entender

Ah Lúcio, testei o programa aqui e acredito que entendi. Desculpe não ter testado da primeira vez.

O que acontece é que o "this" que chama o metodo2() no meu passo 4 é uma instância de B. Então nesse caso é chamado o metodo2() de B.

this sempre é o objeto instanciado, então mesmo que seja chamado na classe mãe, ainda é uma instância de B.