

Seu próximo nível começa aqui
Seu desenvolvimento não pode ter limites. Garanta sua Assinatura Ilimitada e libere uma preparação completa com os melhores professores do Brasil.
Um arquiteto de software está projetando um framework em linguagem Java para o processamento de diferentes tipos de transações financeiras. Para isso, ele define:
• Uma classe abstrata AbstractTransaction, que contém estado compartilhado e parte da implementação comum.
• Duas interfaces, Auditable e Reversible, cada uma declarando contratos de comportamento e fornecendo alguns métodos default.
• Uma classe concreta PixTransfer, que deve reutilizar a implementação comum de AbstractTransaction e também oferecer suporte a auditoria e reversão.
Durante a revisão do projeto, o arquiteto avalia diferentes decisões de projeto, com o uso de diferentes combinações de herança para maximizar reuso e flexibilidade. Qual decisão de projeto é válida?
Declarar PixTransfer como subclasse tanto de AbstractTransaction quanto de outra classe concreta responsável por logging, resolvendo eventuais conflitos de métodos por meio de sobrescrita explícita.
Declarar PixTransfer como subclasse de AbstractTransaction e fazendo-a implementar, simultaneamente, Auditable e Reversible, sobrescrevendo explicitamente eventuais métodos default conflitantes definidos nas interfaces.
Declarar Auditable e Reversible como classes abstratas em vez de interfaces, permitindo que PixTransfer herde múltiplas implementações e confiando na ordem de resolução de métodos da linguagem para tratar conflitos.
Declarar PixTransfer de forma que ela simplesmente implemente Auditable e Reversible, uma vez que a herança de interfaces permite reutilização implícita de estado e comportamento equivalente à herança de uma classe abstrata.