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

Dúvida no Ex. 1 da Aula 1 - Herança, reescrita e polimorfismo

Pessoal, minhas dúvidas estão inseridas no código abaixo como comentários. Desde já, obrigado pelas respostas!

package com.oo.java.alura;

public class Conta {
    private double saldo;

    public double getSaldo() {
        return this.saldo;

// Por que o this?
    }

// Função do Get = acessar atributo privado em outras classes.
    public void sacar (double valor){
        saldo -= valor;
    }

    public void depositar (double valor){
        saldo += valor;
    }
7 respostas
solução!

Oi Gabriel,

O this no método get() náo é necessário, porém é uma boa prática utilizá-lo para uma melhor leitura no seu código. Os getters e setters de uma classe servem exatamente para que quando necessário a utilização desses dados, não se use o atributo diretamente. Dessa maneira você pode fazer validações ou outras lógicas, além de novamente o código ficar mais semântico.

Olá Silvio! Obrigado por comentar. Entendi que o this não é necessário, porém gostaria de entender melhor em que circunstâncias ele é obrigatório . Entendido o Get e Set, obrigado!

Gabriel,

a palavra reservada this quer dizer que é o atributo daquela classe , para mostrar que pertence aquela classe entende .

Por Exemplo :

public class Conta {
    private double valor ;

    Conta(double valor ) {
        valor  = valor 
    }
}

o código acima está errado , pois o java não consegue identificar qual variável está sendo usada no construtor .

então utilizamos a palavra this ,

public class Conta {
    private double valor ;

    Conta(double valor ) {
        this.valor  = valor 
    }
}

neste caso o java sabe que o this.valor é o atributo da classe Conta e o valor e um atributo passado na chamada de construtor em outra classe !!

ficou claro a explicação ? não sei se conseguir ser claro .

espero ter Ajudado .

Olá Celso! Veja se entendi corretamente: o uso do this. Representa , no seu código , que está sendo utilizado o valor de dentro do paramentro do método conta e não o atributo da classe conta.

Gabriel,

me metendo um pouco para tentar esclarecer mais.

Veja a palavra this como uma referência às coisas do objeto, e não às locais.

Vamos pegar o último exemplo do Celso.

public class Conta {
    private double valor ;

    Conta(double valor ) {
        this.valor  = valor 
    }
}

Dentro do construtor você está atribuindo o valor da variável valor passada como parâmetro para dentro da variável do objeto que também se chama valor. Poderíamos reescrever assim:

public class Conta {
    private double valorObjeto;

    Conta(double valorLocal) {
        this.valorObjeto  = valorLocal;
    }
}

Mas como agora o nome valorObjeto e valorLocal são diferentes, nem precisamos mais especificar o this, pois não há mais como o Java se confundir com nomes iguais. Portanto, também poderia ser feito:

public class Conta {
    private double valorObjeto;

    Conta(double valorLocal) {
        valorObjeto = valorLocal;
    }
}

Então o uso do this é opcional em casos onde não há conflitos de nomes entre as "variáveis globais" (atributos da classe/objeto) e as locais.

Olá Filipe. Obrigado por seu comentário ! Apenas para extender um pouco mais a discussão : Chamar o método Conta que contém o parâmetro valor e dizer que o valor do objeto(this.valor) é igual ao valor do parâmetro (valor, sem o this) não teria o mesmo efeito que um setValor?

Gabriel.

Sim , teria o mesmo sentido do método setValor .

normalmente , quando utilizamos um construtor não fazemos os métodos setter .

mas em compensação obriga a você sempre a passar uma valor quando estamos instanciando um classe .

caso , você tenha mais de um construtor ou utilize o padrão , terá que ter o método setter para poder atribuir um valor a variável .