Polimorfismo em Orientação a Objetos
Gabarito: letra A. O polimorfismo, um dos pilares da orientação a objetos, é alcançado principalmente por meio da herança combinada com a sobrescrita de métodos (overriding). A herança permite que uma subclasse seja tratada como sua superclasse, enquanto a sobrescrita redefine o comportamento de um método na subclasse, mantendo a mesma assinatura. Isso possibilita que objetos de diferentes classes respondam de formas distintas a uma mesma chamada de método, caracterizando o polimorfismo. O material de apoio define polimorfismo como:
Polimorfismo: "muitas formas". Permite uma subclasse ser referenciada como sua superclasse. Permite que classes derivadas de uma mesma superclasse tenham métodos de mesma assinatura, mas comportamentos diferentes. Ligação tardia (late binding) em tempo de execução.
E sobrescrita (overriding) como:
Subclasse reescreve/redefine um método da superclasse. Mesmo nome, mesma assinatura. Binding/ligação em tempo de execução.
Alternativa A — ✅ Correta ⟵ GABARITO
Herança e sobrescrita de métodos são os mecanismos essenciais para obter polimorfismo em uma aplicação orientada a objetos. Conforme o material, "Polimorfismo... permite que classes derivadas de uma mesma superclasse tenham métodos de mesma assinatura, mas comportamentos diferentes". Esse comportamento é viabilizado pela herança (relação de especialização) e pela sobrescrita (redefinição do método na subclasse).
Alternativa B — ❌ Incorreta
"Classes estáticas, com métodos protegidos" não são recursos essenciais para polimorfismo. Classes estáticas, por definição, não podem ser instanciadas nem estendidas, inviabilizando a relação de herança necessária ao polimorfismo. O modificador de acesso protegido (protected) é relevante para encapsulamento, mas não é suficiente para gerar polimorfismo. O erro está em confundir mecanismos de acesso com os pilares da POO.
Alternativa C — ❌ Incorreta
Interfaces são um meio de alcançar polimorfismo (por meio de implementações múltiplas), mas a afirmação é imprecisa. Dizer que as interfaces devem conter "métodos não abstratos e implementados" contraria a natureza clássica das interfaces, que possuem métodos abstratos (sem implementação). Mesmo com a introdução de default methods (Java 8+), a essência da interface continua sendo a definição de contratos abstratos. Além disso, a alternativa sugere que essa característica é essencial, o que não é verdade: o polimorfismo pode ser obtido com herança de classes abstratas ou concretas, dispensando interfaces. A alternativa falha por restringir erroneamente os recursos.
Alternativa D — ❌ Incorreta
"Classes abstratas, sem subclasses" é contraditório: uma classe abstrata só existe para ser estendida por subclasses; sem subclasses, não há herança e, consequentemente, não há polimorfismo. Classes abstratas podem ser usadas como base para polimorfismo, desde que haja subclasses concretas que implementem seus métodos abstratos. A ausência de subclasses inviabiliza completamente o polimorfismo.
Alternativa E — ❌ Incorreta
Arrays (unidimensionais ou multidimensionais) são estruturas de dados que armazenam coleções de elementos, mas não são recursos para obter polimorfismo. Eles podem armazenar objetos polimórficos (por exemplo, um array de tipo Animal que contém subclasses Cachorro e Gato), mas o array em si não é um mecanismo que viabiliza o polimorfismo; ele apenas o utiliza. Portanto, está fora do escopo da pergunta.
Gabarito: letra A — herança e sobrescrita de métodos são os recursos essenciais para o polimorfismo.