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:
  1. Uma classe abstrata Mamifero com método abstrato amamentarBebe().
  2. Uma interface Oviparo com método porOvo().
  3. A classe Baleia que estende Mamifero e implementa amamentarBebe().
  4. A classe Ornitorrinco que estende Mamifero e implementa Oviparo, portanto fornece amamentarBebe() e porOvo().
  5. Uma classe TesteAnimais com main que cria objetos de Baleia e Ornitorrinco 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();
    }
}

Exercícios relacionados