No texto da explicação do design pattern Decorator, o atributo outroImposto da classe abstrata Imposto está como private final, mas não consigo herdá-lo para usar na classe filha, exemplo ICMS que herda de Imposto... na sobrescrita do método calculoDoOutroImposto é invocado o método calcula do atributo outroImposto. Só que por causa da sua visibilidade, não compila.
Minha dúvida é que se era para estar assim mesmo na explicação da aula 4 ?
Nesse caso para funcionar deixei o atributo como protected final.
package br.com.impostos;
import br.com.orcamento.Orcamento;
public abstract class Imposto {
protected final Imposto outroImposto;
public Imposto(Imposto outroImposto) {
this.outroImposto = outroImposto;
}
public Imposto() {
this.outroImposto = null;
}
public abstract double calcula(Orcamento orcamento);
protected double calculoDoOutroImposto(Orcamento orcamento) {
if (outroImposto == null) {
return 0;
} else {
return outroImposto.calcula(orcamento);
}
}
}
package br.com.impostos;
import br.com.orcamento.Orcamento;
public class ICMS extends Imposto {
public ICMS(Imposto outroImposto) {
super(outroImposto);
}
@Override
public double calcula(Orcamento orcamento) {
return (orcamento.getValor() * 0.05) + 50;
}
@Override
protected double calculoDoOutroImposto(Orcamento orcamento) {
return outroImposto.calcula(orcamento);
}
}