Não compreendi oq seria menor escopo em relação ao ::shadowing:: .
Não compreendi oq seria menor escopo em relação ao ::shadowing:: .
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; 
    }
}