Olá,
Criei um exercício baseado nas aulas de composição mas está acontecendo algo que não estou entendendo. Guardei toda a lógica que calcula o imposto numa classe que chamei de ImpostoUtil.java. Porém, quando invoco o método através da composição, um trecho do código é ignorado pelo compilador. Mas quando o coloco diretamente na classe sem fazer a delegação, tudo funciona perfeitamente. Seguem as classes:
Tributavel.java
public interface Tributavel {
double getImposto();
}
ProdutoBancario.java
public abstract class ProdutoBancario {
private int numero;
private double saldo;
public void deposita(double valor) {
this.saldo += valor;
}
public double getSaldo() {
return this.saldo;
}
}
ImpostoUtil.java
public class ImpostoUtil extends ProdutoBancario {
private double tributo;
public double getTributo() {
this.tributo = super.getSaldo() * 0.15 + 25.0;
return tributo;
}
}
AcaoDaBolsa.java (Usando composição)
public class AcaoDaBolsa extends ProdutoBancario implements Tributavel {
private ImpostoUtil calculador;
public AcaoDaBolsa() {
this.calculador = new ImpostoUtil();
}
@Override
public double getImposto() {
return this.calculador.getTributo();
}
}
SeguroDeVida.java (Implementando o cálculo diretamente na classe)
public class SeguroDeVida extends ProdutoBancario implements Tributavel {
private double tributo;
@Override
public double getImposto() {
return this.tributo = super.getSaldo() * 0.15 + 150.0;
}
}
TestaTributo.java
public class TestaTributo {
public static void main(String[] args) {
AcaoDaBolsa acao = new AcaoDaBolsa();
acao.deposita(800);
SeguroDeVida seguro = new SeguroDeVida();
seguro.deposita(500);
System.out.println(acao.getImposto());
System.out.println(seguro.getImposto());
}
}
OUTPUT:
25.0
225.0