Questão de Arquitetura de Software — Arquitetura de Software — IV - UFG 2026
Arquitetura de Software›Arquitetura de Software
Código
qg732551
Banca
IV - UFG
Órgão
UFSCAR
Ano
2026
Nível
Superior
Cargo
Analista de TI
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?
ADeclarar 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.
BDeclarar PixTransfer como subclasse de AbstractTransaction e fazendo-a implementar, simultaneamente, Auditable e Reversible, sobrescrevendo explicitamente eventuais métodos default conflitantes definidos nas interfaces.
CDeclarar 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.
DDeclarar 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.
Revelar gabarito e comentário▾
GabaritoB — Declarar PixTransfer como subclasse de AbstractTransaction e fazendo-a implementar, simultaneamente, Auditable e Reversible, sobrescrevendo explicitamente eventuais métodos default conflitantes definidos nas interfaces.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Herança e interfaces em Java
Gabarito: letra B. Em Java, uma classe pode estender apenas uma única classe (herança simples), mas pode implementar múltiplas interfaces. As interfaces podem conter métodos default com implementação; se duas interfaces declararem o mesmo método default, a classe concreta deve sobrescrevê-lo explicitamente para resolver o conflito. A alternativa B reflete exatamente essa regra: PixTransfer estende AbstractTransaction (herança simples) e implementa Auditable e Reversible (múltiplas interfaces), sobrescrevendo quaisquer métodos default conflitantes.
A banca testa o conhecimento do modelo de herança de Java, que não permite herança múltipla de classes, mas permite múltipla implementação de interfaces com resolução de conflitos.
Decisão de Projeto
Herança de Classe
Implementação de Interfaces
Resolução de Conflitos
Validade
A
PixTransfer estende AbstractTransactione outra classe concreta
Não mencionada
Sobrescrita explícita
❌ Inválida (herança múltipla de classes proibida em Java)
Sobrescrita explícita de métodos default conflitantes
✅ Válida
C
PixTransfer estenderia Auditable e Reversible como classes abstratas
Não se aplica
Ordem de resolução de métodos (MRO)
❌ Inválida (herança múltipla de classes proibida)
D
Nenhuma (não estende AbstractTransaction)
Implementa Auditable e Reversible
Não se aplica (sem conflito)
❌ Inválida (interfaces não fornecem estado/atributos como classe abstrata)
Herança em Java
1Herança simples (classes)
Estende 1 classe (concreta ou abstrata)
Não estende 2 classes
2Múltiplas interfaces
Implementa N interfaces
Conflito de default methods
Sobrescrita explícita obrigatória
3Decisão válida (B)
AbstractTransaction (classe)
Auditable e Reversible (interfaces)
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Afirma que PixTransfer pode ser subclasse de AbstractTransactione de outra classe concreta. Em Java, uma classe pode estender no máximo uma classe — não há herança múltipla de classes. Portanto, a decisão é inválida. Mesmo que a outra classe fosse abstrata, ainda assim seria permitida apenas uma superclasse.
Alternativa B — ✅ Correta ⟵ GABARITO
PixTransfer estende AbstractTransaction (herança simples) e implementa Auditable e Reversible. Isso é perfeitamente válido. Se ambas as interfaces definirem um método default com a mesma assinatura, a classe deve sobrescrevê-lo para resolver o conflito, conforme exigido pela linguagem. Essa decisão maximiza reuso: aproveita a implementação de AbstractTransaction e os contratos das interfaces.
Alternativa C — ❌ Incorreta
Propõe transformar Auditable e Reversible em classes abstratas. Ainda assim, Java não permite herança múltipla de classes (nem abstratas nem concretas). PixTransfer não poderia estender ambas. Além disso, a ordem de resolução de métodos (MRO) não se aplica a classes em Java — o conflito seria insolúvel. Portanto, a decisão não é válida.
Alternativa D — ❌ Incorreta
Sugere que PixTransfer apenas implemente as interfaces, ignorando AbstractTransaction. As interfaces em Java não fornecem estado nem implementação de atributos — elas só declaram constantes e métodos (abstratos ou default). Sem herdar de AbstractTransaction, PixTransfer perderia o estado compartilhado e a implementação comum. A afirmação de que "herança de interfaces permite reutilização implícita de estado" é falsa. Decisão inválida.
NÃO CAIA NESSA!
A banca explora a confusão entre "herança múltipla" (proibida em Java) e "implementação múltipla de interfaces" (permitida). Cuidado para não trocar os conceitos: uma classe pode ter várias interfaces, mas apenas uma superclasse.
NÃO CAIA NESSA!
Decore a regra de ouro: extends uma vez, implements várias. Sempre que aparecer conflito de métodos default, a classe deve sobrescrever. Em provas de Java, essa é uma das pegadinhas mais frequentes sobre herança.