Olá pessoal, uma sugestão de como eu pensei nessa questão: Crie uma interface Calculavel com um método double calcularPrecoFinal(). Implemente essa interface nas classes Livro e ProdutoFisico, cada uma retornando o preço final considerando descontos ou taxas adicionais.
Considerando que um Livro é um tipo de produto fisico (não considerei aqui os PDFs kkkk, apenas para exercitar o conceito de herança + interface), coloquei Livro herdando um produto fisico, e o produto fisico com a interface calculavel. Como o livro é filho de ProdutoFisico, então herda inclusive os métodos da interface. Ficou dessa forma:
public interface Calculavel {
double calcularPrecoFinal();
}
public class Livro extends ProdutoFisico {
private String titulo;
private String editora;
}
public class ProdutoFisico implements Calculavel {
private double precoOriginal;
private double desconto;
private double taxasAdicionais;
// coloquei os getters e setters. Tirei para não ficar um texto muito grande o código
@Override
public double calcularPrecoFinal() {
double valorComDesconto = this.precoOriginal * (1 - this.desconto);
return valorComDesconto + this.taxasAdicionais;
}
}
E na classe principal:
Livro livro = new Livro();
livro.setPrecoOriginal(15);
livro.setDesconto(0.2);
livro.setTaxasAdicionais(2);
double valorFinal = livro.calcularPrecoFinal();
System.out.println(livro.getPrecoOriginal() + " com " + livro.getDesconto() * 100 + "% de desconto");
System.out.println(livro.getTaxasAdicionais() + " de taxa");
System.out.println("Valor total: " + valorFinal);