Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida no Ex. 3 da Aula 7 - Aplique princípios de encapsulamento a uma classe

Por favor, não entendi a função do shadowing no setter

class B{
    private int b;
    public int getB() { return b; }
    public void setB(int b) { b= b; }
}
class A {
    public static void main(String[] args) {
        B b = new B();
        b.setB(5);
        System.out.println(b.getB());
    }
}
3 respostas
solução!

Priscila, tudo bem?

Bem, aqui acontece o seguinte: como o método setB() tem uma parâmetro com o mesmo identificador de uma variável de instância, ocorre o shadowing. Sempre que dentro de setB() utilizarmos b, estaremos utulizando a variável local, nunca a de intância.

Para utilizar a variável de instância devemos utilizar o operador this de maneira explícita, para que o java possa entender quando nos referenciamos a variável local e quando nos referenciamos a de instância:

this.b = b;

Quando é feito b = b, não estamos atribuindo um valor a variável de instância, mas à própria variável local. Na prática b recebe o valor dela mesma!

Já a variável de instância b, é iniciada com o valor padrão 0. Quando invoca-se getB(), já que esse método não possui nenhuma variável para que ocorra shadowing ele retorna o valor da variável de instância, que, como vimos, não foi alterada e portanto tem valor 0.

Se não consegui ser claro o suficiente, avisa que vamos tentando tirar as dúvidas. Abraço.

Ficou claro com sua explicação, muito obrigada Lucas.

Por nada Priscila. Qualquer dúvida é só avisar. :)