Interface
Em sistemas reais de pagamento, você precisa lidar com diferentes formas de pagar (cartão, boleto, Pix) de maneira uniforme. Uma interface define o contrato que todas elas devem seguir: o método pagar. Assim, o resto do sistema pode chamar pagamento.pagar(100) sem se importar com o tipo concreto. Dominar interfaces permite criar código extensível e de baixo acoplamento.
O PROBLEMA
Pagavel interface. CartaoCredito, Boleto, Pix implementam.
EXEMPLO
new Pix().pagar(100)
SOBRE O CONCEITO
A interface Pagavel declara apenas a assinatura do método void pagar(double valor), sem corpo. As classes CartaoCredito, Boleto e Pix usam implements Pagavel para se comprometer a implementar esse método — cada uma com sua lógica específica. O erro mais comum é usar extends no lugar de implements. Isso ocorre porque iniciantes confundem herança de classe com implementação de interface: extends é para classes (herdar atributos e métodos), enquanto implements é para interfaces (cumprir um contrato). Usar extends com uma interface gera erro de compilação, pois uma classe não pode estender uma interface (apenas implementá-la). O @Override ajuda a verificar se a assinatura do método está correta.
RESOLUÇÃO