Acerca do conceito de polimorfismo na orientação a objetos,...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: B - 2, 3 e 4, apenas.
Ao abordarmos o tema do polimorfismo na orientação a objetos, devemos compreender que se trata da capacidade de um método ser implementado de diferentes formas em classes que estão numa relação de herança. É um conceito fundamental para o reuso e a extensibilidade do código.
Justificativa para a alternativa B ser a correta:
O item 2) Com o polimorfismo, um objeto pode ser referenciado de várias formas distintas está correto pois é uma definição exata do polimorfismo. Um objeto de uma subclasse pode ser referenciado como se fosse um objeto da superclasse, permitindo uma flexibilidade no tratamento dos objetos.
O item 3) No polimorfismo dinâmico ou de sobrescrita (overriding) os métodos têm nome e assinatura, e na subclasse se redefine um método da superclasse. A decisão do método a ser chamado é tomada em tempo de execução está correto. Ele descreve o overriding corretamente, onde métodos redefinidos são escolhidos em tempo de execução com base no tipo do objeto e não no tipo de referência. Isso permite que o mesmo método possa ter comportamentos diferentes, dependendo do objeto que o invoca.
O item 4) Nas linguagens orientadas a objetos é comum encontrar três formas de polimorfismo: ad hoc (como a sobrecarga de operadores), paramétrico (sobrecarga de nome com assinaturas diferentes) e de herança (reescrita de método) está correto e menciona três categorias de polimorfismo reconhecidas. A sobrecarga de operadores e métodos (ad hoc), a generalização por meio de tipos genéricos (paramétrico), e a especialização por meio de herança que permite a redefinição de comportamentos (polimorfismo de herança).
O item 1) está incorreto pois no polimorfismo de sobrecarga (overloading), a decisão sobre qual versão do método a ser chamado é feita em tempo de compilação, não em tempo de execução. Portanto, a decisão é estática e baseada na assinatura dos métodos, o que difere do polimorfismo de sobrescrita (overriding), que é dinâmico e ocorre em tempo de execução.
Portanto, a alternativa B é a correta, pois apenas os itens 2, 3 e 4 estão corretos.
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
Polimorfismo de nome/Estático/Sobrecarga (Overloading) ---> A decisão é tomada em tempo de COMPILAÇÃO, já que o próprio compilador identifica, por meio da assinatura diferente, qual método chamar.
Isso não é possível no Polimorfismo Dinâmico/Sobrescrita (Overriding), pois a assinatura é idêntica, sendo necessário decidir qual método será chamado em tempo de execução.
Oi?
Alguém poderia explicar por gentileza, qual é a relação de (Sobrecarga de nome com assinaturas diferentes)/(Polimorfismo paramétrico)
b-
overriding - rruntime
overloading - compile time
"Polimorfismo Paramétrico" é apenas outro termo para "genéricos" em Java. A ideia é simples: você declara que tipos serão parametrizados por outros tipos. Um exemplo disso são as collections do pacote java.util.
Quando se declara um ArrayList é necessário definir o seu tipo. No exemplo abaixo temos um ArrayList do tipo Animal.
Collection<Animal> animals = new ArrayList<Animal>();
Fonte: https://stackoverflow.com/questions/10179449/what-is-parametric-polymorphism-in-java-with-example
Deus ajuda quem senta e estuda!
No polimorfismo de nome ou de sobrecarga (overloading) a decisão do método a ser chamado é tomada em tempo de compilação, pela diferença na assinatura.
Elimina a 1 e corre pro abraço.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo