Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Interface ou classe abstrata ?

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);

    }
}
1 resposta
solução!

De um modo geral, não vejo problemas em se implementar essa solução com interface ou classe abstrata, contudo segue abaixo algumas características (gerais) que podem ajudar na decisão de se usar uma ou outra:

Classes Abstratas: Não suportam Herança Múltipla. Podem conter métodos concretos ou abstratos. Suportam constantes estáticas e de instância. Podem conter atributos. Contém construtores.

Interfaces: Suportam Herança Múltipla. Não podem conter qualquer método concreto, apenas abstratos. Suportam somente constantes estáticas. Não contém atributos, apenas assinatura de métodos. Não contém construtores.

Acredito que cabe avaliar, neste caso, qual opção melhor se adequaria a esta situação.

Espero ter ajudado!