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;
}
}