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

Uso do this

Java parte 2 / Aula 3 / Atividade 7 Assim como o this é utilizado para especificar um atributo (this.saldo) daquela conta, posso usá-lo para um método (this.saca)?

2 respostas

Patrícia, Estou voltando a estudar Java agora mas lembro deste tópico ainda do tempo da faculdade, uns 6 anos atrás. O "this" não é necessáriamente para especificar um atributo, ele especifica que o atributo ao qual você se refere, é um atributo da classe. Guarde bem isso (This--> atributo da classe). Respondendo a sua pergunta: Pode sim utilizar, inclusive esta é a finalizadade dele, conseguir apontar para um atributo que não é do método e sim classe instanciada, ou seja, você pode inclusive ter um outro atributo com o nome saca dentro do método , se colocar "this" então está se referindo a atributo da classe e não àquele local dentro do método. Espero ter ajudado.

solução!

Bom dia Patricia. O "this" é uma referência ao objeto atual que o método ou construtor está sendo chamado. Com o "this" podemos nos referir a membros do objeto atual dentro de um método ou construtor, e também chamar um construtor.

Vou mostrar aqui um exemplo do uso do "this.saca". Na classe "Conta" temos o método "saca" e "transfere". Observe que o "transfere" possui o "this.saca":

public abstract class Conta {

    public void saca(double valor) throws SaldoInsuficienteException{

        if(this.saldo < valor) {
            throw new SaldoInsuficienteException("Saldo: " + this.saldo + ", Valor: " + valor);
        } 

        this.saldo -= valor;       
    }

    public void transfere(double valor, Conta destino) throws SaldoInsuficienteException{
        this.saca(valor);
        destino.deposita(valor);
    }

}

Na classe "ContaCorrente" herdamos a classe "Conta" e sobrescrevemos o método "saca". Foi sobrescrito pois queremos que cada saque tenha uma pequena taxa:

public class ContaCorrente extends Conta {

...
    @Override
    public void saca(double valor) {
        double valorASacar = valor + 0.2;
        super.saca(valorASacar);
    }
...
}

Main:

public static void main(String[] args) throws SaldoInsuficienteException {

ContaCorrente patricia = new ContaCorrente(123,111);
ContaCorrente eduardo = new ContaCorrente(1122,1166);

patricia.deposita(500.0);
patricia.transfere(100.0,eduardo);

}

Ao chamar o método "transfere" (patricia.transfere(50.0,eduardo)) ele vai utilizar o método "saca" específico da classe "ContaCorrente" que foi sobrescrito, pois o "this" está se referenciando ao objeto "patricia". Na classe "Conta" o método "transfere" utiliza o "this.saca", ou seja, será chamado o método "saca" específico do objeto que a referência "this" está apontando, que nesse caso é a "patricia", referência de um objeto ContaCorrente.

Como o método "saca" chamado foi o da "ContaCorrente", essa transferência que chama o saque terá um taxa, e o saldo atual será de 399.8.

Como vimos, pode sim usar o "this" juntamente com a chamada de métodos. Espero que tenha entendido, mas você verá isso com mais clareza no curso Java parte 3, onde o professor explica MUITO bem esses conceitos.