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
Mamifero
com método abstratoamamentarBebe()
. - Uma interface
Oviparo
com métodoporOvo()
. - A classe
Baleia
que estendeMamifero
e implementaamamentarBebe()
. - A classe
Ornitorrinco
que estendeMamifero
e implementaOviparo
, portanto forneceamamentarBebe()
eporOvo()
. - Uma classe
TesteAnimais
commain
que cria objetos deBaleia
eOrnitorrinco
e 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();
}
}