Médio C#

Múltiplas interfaces e método default

Enunciado

Crie duas interfaces: IAndar com o método Andar() e INadar com o método Nadar(). A interface INadar deve ter um método default que imprime "Nadando...". Crie a classe Pato que implementa ambas as interfaces. No Main, crie um Pato, chame Andar() (implementado na classe) e Nadar() (método default).

Requisitos

  • Declarar IAndar com void Andar();.
  • Declarar INadar com void Nadar() => Console.WriteLine("Nadando...");.
  • A classe Pato deve implementar IAndar e INadar.
  • Pato deve implementar Andar() imprimindo "Andando...".
  • O programa deve chamar ambos os métodos e imprimir as mensagens corretas.

Código inicial

using System;

// TODO: declarar IAndar

// TODO: declarar INadar com método default

// TODO: implementar Pato

public class Program
{
    public static void Main()
    {
        // TODO: criar Pato e chamar Andar() e Nadar()
    }
}

Saída esperada

Andando...
Nadando...
Ver dica

Métodos default em interfaces são declarados com corpo diretamente na interface. A classe não precisa implementá-los, mas pode se quiser sobrescrever.

Mostrar solução
using System;

// Interface sem implementação padrão
public interface IAndar
{
    void Andar();
}

// Interface com método default
public interface INadar
{
    void Nadar() => Console.WriteLine("Nadando...");
}

// Classe implementa as duas interfaces
public class Pato : IAndar, INadar
{
    public void Andar()
    {
        Console.WriteLine("Andando...");
    }
    // Nadar() não é implementado aqui; usa o default
}

public class Program
{
    public static void Main()
    {
        var pato = new Pato();
        pato.Andar();   // método implementado na classe
        pato.Nadar();   // método default da interface
    }
}

Passo a passo

  1. IAndar declara o método Andar() sem corpo.
  2. INadar declara Nadar() com um corpo padrão que imprime "Nadando...".
  3. Pato herda de IAndar e INadar. Como Nadar() tem implementação default, não precisamos escrevê-lo em Pato.
  4. No Main, criamos um Pato e chamamos Andar() e Nadar().
  5. Andar() executa o código da classe; Nadar() executa o código default da interface.

Por que funciona

Métodos default permitem adicionar funcionalidades a interfaces sem quebrar classes existentes. A classe pode optar por não implementar o método e usar o padrão. Múltiplas interfaces permitem que uma classe combine comportamentos de várias fontes.

Erros comuns

  • Esquecer de implementar Andar() em Pato – erro de compilação.
  • Tentar chamar Nadar() através de uma referência do tipo IAndar – não compila, pois IAndar não tem esse método.
  • Declarar o método default como abstract ou virtual – em interfaces, métodos com corpo são default por padrão.

Outra forma de resolver

Se Pato quisesse sobrescrever Nadar(), poderia implementá-lo explicitamente. Mas o default já atende.

Saída esperada

Andando...
Nadando...