Observe o código Java apresentado abaixo: abstract class An...
abstract class Animal { public abstract double getCotaLeite(); }
class Elefante extends Animal { public double getCotaLeite(){ return 20.0; } }
class Rato extends Animal { public double getCotaLeite() { return 0.5; } }
class Aplicativo { public static void main(String args[]){ Animal animal1 = new Elefante(); System.out.println(“Cota diaria de leite do elefante: “ + animal1. getCotaLeite()); Animal animal2 = new Rato(); System.out.println(“Cota diaria de leite do rato: “ + animal2. getCotaLeite()); } }
Assinale a alternativa que apresenta corretamente dois conceitos importantes para a orientação a objetos desenvolvidos no código acima:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: A - Herança e Polimorfismo
Essa questão explora dois pilares fundamentais da Programação Orientada a Objetos (POO): Herança e Polimorfismo. Vamos entender cada um deles e por que são aplicados no código apresentado:
Herança é um princípio pelo qual uma classe (conhecida como subclasse ou classe derivada) pode herdar características (atributos e métodos) de outra classe (conhecida como superclasse ou classe base). No código fornecido, temos uma classe abstrata chamada Animal
que define um método abstrato getCotaLeite()
. As classes Elefante
e Rato
são subclasses que estendem a classe Animal
e provêem uma implementação concreta para o método getCotaLeite()
. Isso é um exemplo textbook de herança.
Polimorfismo, por outro lado, é a capacidade de um objeto ser referenciado de várias formas. Isso é geralmente alcançado através de herança, onde uma subclasse é tratada como sua superclasse. No código, vemos polimorfismo em ação quando uma instância da classe Elefante
é tratada como um objeto do tipo Animal
e o mesmo acontece com uma instância da classe Rato
. Isso permite chamar o método getCotaLeite()
sem precisar saber o tipo específico do objeto Animal
, o que demonstra claramente polimorfismo.
Assim, a alternativa Herança e Polimorfismo é a correta pois descreve de maneira precisa os conceitos de POO que são demonstrados neste trecho de código Java. As outras alternativas mencionam conceitos que ou não são aplicados (como Herança Múltipla, que nem mesmo é suportada em Java) ou que não são relevantes para o código apresentado (como Serialização e Proteção).
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
na dúvida vai por eliminação!
Quando a classe Elefante e a Rato estendem a classe Animal, estamos diante do conceito de herança.
class Elefante extends Animal
class Rato extends Animal
Quando a classe Elefante e a Rato sobrescrevem o método getCotaLeite() da classe Animal, estamos diante do conceito de polimorfismo.
abstract class Animal {
public abstract double getCotaLeite();
}
class Elefante extends Animal {
public double getCotaLeite() {
return 20.0; }
}
class Rato extends Animal {
public double getCotaLeite() {
return 0.5; }
}
Herança e polimorfismo, se gor para pra pensar as analógicas apontam tudo para herança e polimorfismo
## Tradução Detalhada do Código Java
**Classe Abstrata `Animal`:**
* Esta classe define um modelo para objetos de animais.
* Ela é declarada como `abstract`, o que significa que não pode ser instanciada diretamente (você não pode criar objetos do tipo `Animal`).
* Possui um único método abstrato chamado `getCotaLeite()`.
* Métodos abstratos não possuem implementação dentro da própria classe abstrata. Eles devem ser implementados por subclasses que herdam de `Animal`.
**Classe `Elefante`:**
* Esta classe herda da classe `Animal`.
* Fornece uma implementação concreta para o método `getCotaLeite()`.
* O método retorna um valor fixo de 20.0, provavelmente representando a cota de leite diária para um elefante (assumindo que este código seja um exemplo hipotético).
**Classe `Rato`:**
* Esta classe também herda da classe `Animal`.
* Implementa o método `getCotaLeite()` também.
* O método retorna 0.5, possivelmente representando a cota de leite diária para um rato (novamente, assumindo um cenário hipotético).
**Classe `Aplicativo` (Programa Principal):**
* Esta classe contém o método `main`, que é o ponto de entrada para a execução do programa.
* Dentro do `main`:
- Uma variável de referência `Animal` `animal1` é criada. No entanto, você não pode criar diretamente um objeto `Animal` porque é abstrato.
- Em vez disso, `animal1` é atribuída uma referência a um objeto `Elefante` usando a palavra-chave `new`. Isso é permitido porque `Elefante` é uma subclasse de `Animal`.
- O método `getCotaLeite()` é chamado em `animal1`, e como se refere a um objeto `Elefante`, a implementação da classe `Elefante` é usada, retornando 20.0. Este valor é então impresso.
- Da mesma forma, uma variável de referência `Animal` `animal2` é atribuída a uma referência a um objeto `Rato`.
- Quando `getCotaLeite()` é chamado em `animal2`, a implementação da classe `Rato` é usada, retornando 0.5, que é impresso.
**Pontos Chave:**
* **Abstração:** A classe `Animal` demonstra abstração definindo um conceito geral (animal com cota de leite), mas deixando a implementação específica para subclasses.
* **Polimorfismo:** O uso de referências `Animal` com objetos de diferentes subclasses (Elefante e Rato) permite um comportamento polimórfico, onde o método real chamado depende do tipo do objeto em tempo de execução.
* **Código Aprimorado:** Embora o código forneça um exemplo claro, é importante notar que a maioria dos animais não produz leite. Se você pretende representar cenários do mundo real, considere usar uma propriedade diferente como "som" ou "dieta" em vez de "cota de leite".
Fonte: Gemini
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo