Qual seria a vantagem de declararmos uma variável de um tipo menos específico do que o objeto realmente é?
Qual seria a vantagem de declararmos uma variável de um tipo menos específico do que o objeto realmente é?
Oi Alexandre,
Você tem a vantagem de poder usar o polimorfismo. Um método que recebe um tipo pai consegue receber qualquer um dos tipos filhos. Exemplo:
Imagine que você tem uma classe Conta
e duas classes filhas ContaCorrente
e ContaPoupanca
. Algo como:
public class Conta {
private int numero;
private int agencia;
private double saldo;
public Conta(int numero, int agencia, double saldoInicial) {
this.numero = numero;
this.agencia = agencia;
this.saldo = saldoInicial;
}
public String extrato() {
return "Conta possui saldo de: " + this.saldo;
}
// outros métodos
}
public class ContaCorrente extends Conta {
private double limite;
public ContaCorrente(int numero, int agencia, double saldoInicial, double limite) {
super(numero, agencia, saldoInicial);
this.limite = limite;
}
// métodos
public String extrato() {
return "Conta Corrente -- Saldo: [" + this.getSaldo() + "] Limite: [" + this.limite + "]";
}
}
public class ContaPoupanca extends Conta {
private double taxa;
public ContaPoupanca(int numero, int agencia, double saldoInicial, double taxa) {
super(numero, agencia, saldoInicial);
this.taxa = taxa;
}
// métodos
}
Se tivermos uma classe que imprime os extratos das contas, podemos dizer que o método recebe um parâmetro do tipo da classe mãe que o mesmo funcionará tanto para a ContaCorrente
quanto para ContaPoupanca
.
public class ConsolidaExtratos {
public void imprimeExtrato(Conta conta) {
System.out.println("Imprimindo extrato da conta: " + conta);
System.out.println(conta.extrato());
}
}
public class Teste {
public static void main(String [] args) {
ConsolidaExtratos ce = new ConsolidaExtratos();
ContaCorrente cc = new ContaCorrente(1, 100, 1000, 500);
ContaPoupanca cp = new ContaPoupanca(2, 100, 1000, 0.05);
ce.imprimeExtrato(cc);
ce.imprimeExtrato(cp);
}
}
Por conta de usarmos o tipo menos específico, podemos passar os dois tipos para o método imprimeExtrato
.
Ficou um pouco mais claro?
Abraço!
Entendi. Obrigado!