Olá. Apesar de funcionar e eu entender o funcionamento, achei um pouco estranho a composição entre a classe "CalculadorDeImpostos" e a classe "SeguroDeVida".Pelo que foi ensinado durante o curso, a interface obriga às classes que "assinam o contrato" a implementar um método e, por sua vez, para não repetir código, delegamos esta implementação para uma classe externa (composição). Esta classe externa, então, é obrigada a implementar o método como exigido pela interface.
No exemplo do professor Nico, a classe "CalculadorDeImposto" (classe externa onde se escreve a implementação do método) que deveria implementar o método exigido não somente não implementa o método (não existe a implementação de "getValorImposto()" nesta classe), como devolve a implementação do mesmo pras próprias classes que a chamam (a implementação de "getValorImposto()" está na própria "SeguroDeVida").
Segue o código de como eu acho que seria a resolução, seguindo o mesmo modelo do projeto "bytebank-herdado":
public interface Tributavel {
double getValorImposto();
}
public class CarteiraDeAcoes implements Tributavel {
private CalculadorDeImpostos calculador;
public CarteiraDeAcoes() {
this.calculador = new CalculadorDeImpostos();
}
@Override
public double getValorImposto() {
return this.calculador.getValorImposto();
}
}
public class CalculadorDeImpostos {
//variavel qualquer possivelmente utilizada no calculo
private double variavelQualquer;
public double getValorImposto() {
//implementacao do metodo que retorna um double como exemplo
double calculoQualquer = 1.0;
return calculoQualquer;
}
Estou errado em achar estranho implementar o método "getValorImposto" na própria classe "SeguroDeVida", quando existe uma classe criada teoricamente pra isso? Minha resolução está correta?
Obrigado