Oi Leandro,
Nenhuma pergunta é boba. Fique sempre a vontade para perguntar qualquer coisa que não tenha entendido ou que não tenha ficado claro :)
O this
é utilizado para indicar algum atributo ou método da própria classe. Dependendo do caso ele pode ser opcional. Por exemplo, imagine que você tem a seguinte classe:
public class Investimento {
private String cliente;
private double valor;
public double calcularRendimento() {
double taxa = 0.03;
return this.valor * taxa;
}
}
Olhando para o return
no método calcularRendimento()
, o this nesse caso é opicional, pois o método não tem parametros com o mesmo nome do atributo.
Mas se o método fosse assim:
public double calcularRendimento(double valor) {
double taxa = 0.03;
return (this.valor + valor) * taxa;
}
Agora o this
é obrigatório, pois dentro do método quando você escrever valor o Java não tem como saber se você está falando do parâmetro do método que chama valor, ou do atributo da classe que também se chama valor.
Nesse caso sem o this, você está falando do parâmetro, e com o this está falando do atributo.
Agora sobre o super, ele somente é usado em caso de herança. Vamos a um exemplo:
public class Conta {
protected double saldo;
public void depositar(double valor) {
this.saldo += valor;
}
}
public class Poupanca extends Conta {
public void depositar(double valor) {
double juros = 0.10;
this.saldo -= juros;
this.saldo += valor;
}
}
No meu exemplo, a classe Poupanca
sobrescreveu completamente o método depositar
que foi herdado da classe Conta. Como é uma sobrescrita, o Java sempre chamará o método depositar da classe Poupanca, e não mais o da classe Conta.
Mas imagine que não queremos modificar completamente o método depoistar
, mas apenas fazer um complemento em relação ao que é feito no método depoistar da classe Conta. Nesse caso, como podemos fazer para reaproveitar o código do método depositar da classe Conta(reaproveitando o que jaá existe nele), e após isso fazendo o complemento ?
É aí que entra o super
:
public void depositar(double valor) {
super(valor);
double juros = 0.10;
this.saldo -= juros;
}
O que o super faz nesse caso é chamar o método depositar da classe Conta.
Com isso podemos evitar duplicar o código que já existe no método depositar da classe conta, no método depositar da classe Poupanca.
Faz sentido?
Bons estudos!