segunda-feira, 15 de janeiro de 2018

[Java] Utilizando a técnica de Shadowing

Uma dúvida muito recorrente entre programadores iniciantes, é sobre a ambiguidade entre
as variáveis e atributos dentro de uma classe, principalmente quando estão encapsulando
os atributos, fazendo um curso na Alura (que inclusive recomendo fortemente), descobri
sobre a técnica de shadowing, veja:

 Para resolver problemas de ambiguidade entre variáveis dentro do mesmo escopo
utilizamos a técnica de shadowing, 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
    }
}