No exemplo citado no curso usamos uma interface para resolver o problema em questão, mas eu poderia ao invés de uma interface usar uma classe abstrata ? De alguma forma tem algum problema em resolver esse problema usando classes abstratas ?
exemplo classe abstrata:
abstract class ModeloImposto {
private double taxa;
public ModeloImposto(double taxa) {
this.taxa = taxa;
}
public double calcular(Orcamento orcamento) {
return orcamento.getValor() * this.taxa;
}
}
exemplo de uma classe concreta que herda a classe abstrata :
public class NovoImposto extends ModeloImposto{
public NovoImposto(double taxa) {
super(taxa);
}
}
Teste da implementação:
public class TestarImposto {
public static void main(String[] args) {
CalculadorDeImposto calculador = new CalculadorDeImposto();
// Usando interfaces
Orcamento orcamento = new Orcamento(100);
Imposto icms = new Icms(0.1);
calculador.realizacalculo(orcamento, icms);
//Usando classe abstrata
ModeloImposto iss = new Iss(0.1);
calculador.realizacalculo2(orcamento, iss);
ModeloImposto novoImposto = new NovoImposto(0.7);
calculador.realizacalculo2(orcamento, novoImposto);
}
}