Considere um sistema bancário em Java que possui a classe Cl...
Para atender a essa condição, a implementação dessas classes deve possuir o método getDesconto
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a Alternativa C.
Para entender por que a Alternativa C é a correta, precisamos analisar os conceitos de herança e polimorfismo no contexto da programação orientada a objetos, especialmente em Java.
No Java, herança permite que uma classe herde métodos e atributos de outra classe. Uma classe abstrata, como Cliente no enunciado, pode definir métodos abstratos que precisam ser implementados por suas subclasses. Isso força as subclasses a implementar esses métodos, garantindo que comportamentos específicos sejam definidos para cada tipo de cliente.
Polimorfismo permite que uma função se comporte de maneira diferente com base no objeto que a invoca. Quando temos um método como getDesconto, que deve ser aplicado a qualquer instância da classe Cliente (ou suas subclasses), o polimorfismo é fundamental para que cada subclass implemente o método de forma que ele se adeque ao seu tipo específico de cliente.
A Alternativa C sugere que o método getDesconto seja definido como abstrato na classe Cliente, e que suas subclasses, ClientePessoaFisica e ClientePessoaJuridica, implementem esse método. Isso está correto porque, ao ser declarado abstrato, o método getDesconto obriga as subclasses a fornecerem suas próprias implementações, personalizando o cálculo do desconto conforme necessário.
Agora, vejamos por que as outras alternativas estão incorretas:
Alternativa A: Sugere implementar getDesconto na classe Cliente com estruturas condicionais para identificar o tipo de subclasse. Isso vai contra o princípio de polimorfismo, pois não aproveita as vantagens da sobrescrita de métodos, além de tornar o código menos extensível e mais difícil de manter.
Alternativa B: Diz que o método deve ser implementado apenas nas subclasses. Embora correto em parte, omite a necessidade de declarar o método como abstrato na classe Cliente para forçar essa implementação.
Alternativa D: Propõe implementar o método fora das classes, o que não faz sentido em um paradigma orientado a objetos, onde métodos devem estar associados às suas respectivas classes para aproveitar herança e polimorfismo.
Alternativa E: Sugere que o método getDesconto seja totalmente implementado em todas as classes, com a classe Cliente chamando as implementações das subclasses. Isso é um uso ineficiente dos conceitos de herança e polimorfismo, pois a chamada direta contraria o propósito da declaração abstrata.
Concluindo, a chave para resolver esta questão está na correta aplicação dos princípios de herança e polimorfismo, permitindo que cada subclasse cuide de sua própria lógica de desconto.
Gostou do comentário? Deixe sua avaliação aqui embaixo!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Qual o erro da alternativa B?
Alex, a alternativa está errada porque ignora que o método deve ser implementado na classe abstrata Cliente
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo