1
resposta

Conceito de menor escopo

Não compreendi oq seria menor escopo em relação ao ::shadowing:: .

1 resposta

Oi Leonardo, tudo bem?

Em Java é possível declarar variáveis locais ou ter receber parâmetros nos métodos com o mesmo nome de variáveis de instância. Essa técnica é chamada de shadowing. Nesses casos, é possível resolver a ambiguidade: para variáveis de classe, podemos referenciar pela própria classe; para variáveis de instância, usamos a palavra chave this:


class Pessoa {

    static int x = 0;
    int y = 0;

    public static void setX(int x) {
        // Usando a referência da classe
        Pessoa.x = x;
    }

    public void setY(int y) {
        // usando o this
        this.y = y;
    }
}

Quando não usamos o this ou o nome da classe para usar a variável, o compilador sempre utilizará a variável de menor escopo:


class X {
    int a = 10;

    public void metodo() {
        int a = 20; // shadowing
        System.out.println(a); // imprime 20, pois a variável de "menor escopo" é o escopo local, que é o int a = 20; 
    }
}