Questão 5. (2.5 pontos) Crie um programa que implemente as seguintes classes e métodos relacionados a uma hierarquia taxonômica de animais.
- Mamifero é uma classe abstrata com o método abstrato amamentar bebês, que não retorna nada.
- baleia é mamífero e implementam o método abstrato herdado, a tela exibe uma mensagem indicando que elas estão amamentando seus filhotes.
- Oviparo é uma interface com o método de pôr Ovos.
- O ornitorrinco é um mamífero que põe ovos. Portanto, é uma classe que herda de Mamifero e implementa a interface Oviparo. O método herdado da classe pai mostra na tela que o ornitorrinco amamenta seus filhotes e o método implementado pela interface mostra na tela que põe ovos.
- Gere uma classe principal Java TesteAnimais onde uma baleia e um ornitorrinco são criados e os métodos são invocados.
Passo 1
O enunciado pede para criarmos uma hierarquia de classes em Java envolvendo herança e interfaces. O conteúdo aqui é orientação a objetos: classes abstratas, métodos abstratos, herança e implementação de interface. Precisamos definir:
- Uma classe abstrata
Mamiferocom método abstratoamamentarBebe(). - Uma interface
Oviparocom métodoporOvo(). - A classe
Baleiaque estendeMamiferoe implementaamamentarBebe(). - A classe
Ornitorrincoque estendeMamiferoe implementaOviparo, portanto forneceamamentarBebe()eporOvo(). - Uma classe
TesteAnimaiscommainque cria objetos deBaleiaeOrnitorrincoe invoca seus métodos.
Passo 2
Definimos a classe abstrata
Mamifero e a interface Oviparo. Em Mamifero deixamos o método amamentarBebe() sem corpo para forçar as subclasses a implementá-lo. Em Oviparo declaramos o método porOvo().public abstract class Mamifero {
// Método abstrato que obriga subclasses a implementar a amamentação
public abstract void amamentarBebe();
}
public interface Oviparo {
// Método que indica ação de pôr ovos
void porOvo();
}
Passo 3
Criamos a classe
Baleia que herda de Mamifero. Como Mamifero tem método abstrato, Baleia deve fazer @Override de amamentarBebe() e imprimir uma mensagem.public class Baleia extends Mamifero {
@Override
public void amamentarBebe() {
System.out.println("A baleia está amamentando seu filhote.");
}
}
Passo 4
Fazemos a classe
Ornitorrinco que herda de Mamifero e implementa Oviparo. Assim, ela precisa sobrescrever amamentarBebe() e implementar porOvo(), cada um exibindo sua respectiva mensagem.public class Ornitorrinco extends Mamifero implements Oviparo {
@Override
public void amamentarBebe() {
System.out.println("O ornitorrinco está amamentando seu filhote.");
}
@Override
public void porOvo() {
System.out.println("O ornitorrinco está pondo um ovo.");
}
}
Passo 5
Na classe principal
TesteAnimais, criamos instâncias de Baleia e Ornitorrinco e chamamos seus métodos para demonstrar o polimorfismo e implementação de interface.public class TesteAnimales {
public static void main(String[] args) {
Mamifero baleia = new Baleia();
baleia.amamentarBebe();
Ornitorrinco ornitorrinco = new Ornitorrinco();
ornitorrinco.amamentarBebe();
ornitorrinco.porOvo();
}
}
Resposta
// Mamifero.java
public abstract class Mamifero {
public abstract void amamentarBebe();
}
// Oviparo.java
public interface Oviparo {
void porOvo();
}
// Baleia.java
public class Baleia extends Mamifero {
@Override
public void amamentarBebe() {
System.out.println("A baleia está amamentando seu filhote.");
}
}
// Ornitorrinco.java
public class Ornitorrinco extends Mamifero implements Oviparo {
@Override
public void amamentarBebe() {
System.out.println("O ornitorrinco está amamentando seu filhote.");
}
@Override
public void porOvo() {
System.out.println("O ornitorrinco está pondo um ovo.");
}
}
// TesteAnimales.java
public class TesteAnimales {
public static void main(String[] args) {
Mamifero baleia = new Baleia();
baleia.amamentarBebe();
Ornitorrinco ornitorrinco = new Ornitorrinco();
ornitorrinco.amamentarBebe();
ornitorrinco.porOvo();
}
}