Analise o código Javascript, a seguir.Sobre o código Javascript apresentado, analise as afirmativas a seguir e assinale (V) para a verdadeira e (F) para a falsa.( ) A classe Ave é uma classe abstrata que fornece uma interface para outras classes de aves.( ) A classe Pato e a classe Galinha são exemplos de polimorfismo, pois ambas sobrescrevem o método som() da classe Ave.( ) O método som() na classe Ave pode ser chamado diretamente para fazer o som da ave.As afirmativas são, respectivamente,
AF – V – F.
BV – F – F.
CV – V – F.
DV – F – V.
Revelar gabarito e comentário▾
GabaritoD — V – F – V.
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 Polimorfismo em JavaScript
Gabarito: letra D (V – F – V). A primeira afirmativa é verdadeira porque a classe Ave atua como uma classe abstrata, definindo um contrato (o método som()) que as subclasses devem implementar. A segunda é falsa porque o polimorfismo não é a simples sobrescrita de métodos, mas a capacidade de um objeto ser tratado como um tipo mais genérico e, em tempo de execução, executar a implementação específica da sua classe concreta. A terceira é verdadeira, pois, em JavaScript, o método som() da classe Ave pode ser chamado diretamente, já que a linguagem não possui o conceito de métodos abstratos puros como Java.
O paradigma de orientação a objetos em JavaScript é baseado em protótipos, mas a partir do ES6 (ECMAScript 2015) foi introduzida a sintaxe de classes, que oferece uma forma mais familiar de trabalhar com herança e polimorfismo. Uma classe abstrata, em linguagens como Java, é uma classe que não pode ser instanciada e que pode conter métodos abstratos (sem implementação) que as subclasses são obrigadas a implementar. Em JavaScript, não existe o modificador abstract; qualquer classe pode ser instanciada, e qualquer método pode ser chamado diretamente. No entanto, é comum usar classes base como Ave para definir uma interface comum, mesmo que a linguagem não force a implementação dos métodos.
O polimorfismo, por sua vez, é um dos pilares da orientação a objetos. Ele permite que um objeto de uma classe derivada seja tratado como um objeto da classe base, e que o método chamado seja resolvido em tempo de execução, de acordo com o tipo real do objeto. No código apresentado, Pato e Galinha herdam de Ave e sobrescrevem o método som(). Quando um objeto do tipo Pato é referenciado por uma variável do tipo Ave, a chamada som() executará a implementação de Pato, não a de Ave. Isso é polimorfismo. A simples sobrescrita, sem a referência polimórfica, não caracteriza o conceito completo.
A terceira afirmativa aborda uma característica específica do JavaScript: a ausência de métodos abstratos. Em Java, um método abstrato não pode ser chamado diretamente, pois não possui implementação. Em JavaScript, todos os métodos têm implementação (mesmo que seja um corpo vazio ou um throw), e podem ser chamados diretamente em qualquer instância da classe. Portanto, ave.som() é uma chamada válida, mesmo que Ave seja considerada uma classe abstrata por convenção.
A pegadinha da banca está em confundir o conceito de polimorfismo com a simples sobrescrita de métodos. Muitos candidatos marcam a segunda afirmativa como verdadeira, pois veem Pato e Galinha sobrescrevendo som(). No entanto, o polimorfismo só se manifesta quando há uma referência do tipo base apontando para um objeto do tipo derivado, e a chamada do método é resolvida dinamicamente. A sobrescrita é um pré-requisito, mas não é o polimorfismo em si.
Polimorfismo: Pré-requisito (Herança, Sobrescrita de método); Essência (Referência do tipo base, Objeto do tipo derivado, Resolução dinâmica em runtime); Sem referência polimórfica (Não caracteriza polimorfismo)
Afirmativa 1 — ✅ Verdadeira
A classe Ave é uma classe abstrata no sentido de fornecer uma interface para outras classes de aves. Ela define o método som(), que as subclasses Pato e Galinha implementam de forma específica. Em JavaScript, não há a palavra-chave abstract, mas a classe base atua como um contrato, garantindo que as subclasses tenham o método som(). Isso é uma prática comum para simular abstração.
Afirmativa 2 — ❌ Falsa
A afirmativa diz que Pato e Galinha são exemplos de polimorfismo porque ambas sobrescrevem o método som(). Isso é uma confusão conceitual. A sobrescrita é apenas um dos elementos do polimorfismo. O polimorfismo ocorre quando um objeto é referenciado por um tipo mais genérico e o método chamado é resolvido em tempo de execução. No código, se houver uma variável do tipo Ave apontando para um objeto Pato, a chamada som() executará a versão de Pato. A simples sobrescrita, sem essa referência polimórfica, não caracteriza o polimorfismo.
Afirmativa 3 — ✅ Verdadeira
Em JavaScript, o método som() da classe Ave pode ser chamado diretamente, pois a linguagem não possui métodos abstratos puros. Qualquer método definido em uma classe pode ser invocado em uma instância, mesmo que a classe seja considerada abstrata por convenção. Isso difere de linguagens como Java, onde métodos abstratos não podem ser chamados diretamente.
Conclusão: Corretas: 1 e 3 → portanto a alternativa é a letra D.