Eu consegui assim:
Classe Produto
package br.com.alura.screenmatch.desafios.precofinal;
public class Produto {
private double preco;
public double getPreco() {
return preco;
}
public void setPreco(double preco) {
this.preco = preco;
}
}
Classe ProdutoFisico que estende Produto e implementa Calculavel
package br.com.alura.screenmatch.desafios.precofinal;
public class ProdutoFisico extends Produto implements Calculavel {
@Override
public double calcularPrecoFinal() {
double taxa = 0.2;
double precoFinal = getPreco() + getPreco() * taxa;
return precoFinal;
}
}
Classe Livro que estende Produto e implementa Calculavel
package br.com.alura.screenmatch.desafios.precofinal;
public class Livro extends Produto implements Calculavel {
private String autor;
@Override
public double calcularPrecoFinal() {
double desconto = 0.1;
double precoFinal = getPreco() - getPreco() * desconto;
return precoFinal;
}
}
Classe main TestePrecoFinal que usa um método estático para exibir o preço calculado
package br.com.alura.screenmatch.desafios.precofinal;
public class TestePrecoFinal {
public static void main(String[] args) {
Livro livro = new Livro();
livro.setPreco(100);
exibePrecoFinal(livro);
ProdutoFisico produtoFisico = new ProdutoFisico();
produtoFisico.setPreco(100);
exibePrecoFinal(produtoFisico);
}
public static void exibePrecoFinal(Calculavel prod) {
System.out.println("Aqui está passando o produto do tipo: " + prod);
System.out.println("O preço final do produto é: " + prod.calcularPrecoFinal());
}
}
Se tiver como melhorar o código, com o que foi visto até agora, por favor comentem...
O método estático ainda não foi visto, mas eu peguei no Google, porque achei que criar outra classe só para exibir o resultado seria muita coisa, o que acham?