Gostei de ter usado a Interface nesse exercício.
package com.github.lucasdevrj.exercicios.sistemadepagamentos;
import java.math.BigDecimal;
public abstract class Pagamento {
private BigDecimal valor;
public Pagamento(BigDecimal valor) {
this.valor = valor;
}
public BigDecimal getValor() {
return valor;
}
public abstract void confirmarPagamento();
}
package com.github.lucasdevrj.exercicios.sistemadepagamentos;
import java.math.BigDecimal;
public class BoletoBancario extends Pagamento implements Taxa {
public BoletoBancario(BigDecimal valor) {
super(valor);
}
@Override
public void confirmarPagamento() {
System.out.printf("Boleto de R$%.2f gerado com sucesso (Taxa: R$%.2f)\n", getValor(), aplicaTaxa());
}
@Override
public BigDecimal aplicaTaxa() {
BigDecimal taxa = new BigDecimal("1.00").divide(new BigDecimal("100"));
taxa = taxa.multiply(getValor());
return taxa;
}
}
package com.github.lucasdevrj.exercicios.sistemadepagamentos;
import java.math.BigDecimal;
public class CartaoCredito extends Pagamento implements Taxa {
public CartaoCredito(BigDecimal valor) {
super(valor);
}
@Override
public void confirmarPagamento() {
System.out.printf("Pagamento de R$%.2f confirmado no Cartão de Crédito (Taxa: R$%.2f)\n", getValor(), aplicaTaxa());
}
@Override
public BigDecimal aplicaTaxa() {
BigDecimal taxa = new BigDecimal("3.00").divide(new BigDecimal("100"));
taxa = taxa.multiply(getValor());
return taxa;
}
}
package com.github.lucasdevrj.exercicios.sistemadepagamentos;
import java.math.BigDecimal;
public class Pix extends Pagamento {
public Pix(BigDecimal valor) {
super(valor);
}
@Override
public void confirmarPagamento() {
System.out.printf("Pagamento via Pix de R$%.2f confirmado\n", getValor());
}
}
package com.github.lucasdevrj.exercicios.sistemadepagamentos;
import java.math.BigDecimal;
public interface Taxa {
BigDecimal aplicaTaxa();
}
/**
* Você está desenvolvendo o núcleo de processamento para uma fintech. A startup precisa de um sistema
* que possa acomodar diferentes métodos de pagamento, cada um com suas particularidades de confirmação
* e regras de taxação. Seu desafio é criar uma estrutura que unifique o essencial, mas permita
* comportamentos específicos para cada forma de pagamento.
*
* Crie um programa que:
*
* Defina uma classe base Pagamento com o atributo valor.
* Cada subclasse (CartaoCredito, BoletoBancario e Pix) implementa sua própria lógica de confirmação
* e cálculo de taxas.
* Cartão: 3%.
* Boleto: 1%
* Pix: sem taxas
* Exiba a mensagem de confirmação no console e mostre o valor da taxa.
* Exemplo de entrada:
*
* Pagamento cartao = new CartaoCredito(250.00);
* Pagamento boleto = new BoletoBancario(500.00);
* Pagamento pix = new Pix(300.00);
*
* cartao.confirmarPagamento();
* boleto.confirmarPagamento();
* pix.confirmarPagamento();
*
* Saída esperada:
*
* Pagamento de R$250,00 confirmado no Cartão de Crédito (Taxa: R$7,50)
* Boleto de R$500,00 gerado com sucesso (Taxa: R$5,00)
* Pagamento via Pix de R$300,00 confirmado
*/
package com.github.lucasdevrj.exercicios.sistemadepagamentos;
import java.math.BigDecimal;
public class Principal {
public static void main(String[] args) {
CartaoCredito cartaoCredito = new CartaoCredito(new BigDecimal("568.34"));
BoletoBancario boletoBancario = new BoletoBancario(new BigDecimal("643.45"));
Pix pix = new Pix(new BigDecimal("400.00"));
cartaoCredito.confirmarPagamento();
boletoBancario.confirmarPagamento();
pix.confirmarPagamento();
}
}

Tudo certo?