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
IAndarcomvoid Andar();. - Declarar
INadarcomvoid Nadar() => Console.WriteLine("Nadando...");. - A classe
Patodeve implementarIAndareINadar. Patodeve implementarAndar()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
IAndardeclara o métodoAndar()sem corpo.INadardeclaraNadar()com um corpo padrão que imprime"Nadando...".Patoherda deIAndareINadar. ComoNadar()tem implementação default, não precisamos escrevê-lo emPato.- No
Main, criamos umPatoe chamamosAndar()eNadar(). 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()emPato– erro de compilação. - Tentar chamar
Nadar()através de uma referência do tipoIAndar– não compila, poisIAndarnão tem esse método. - Declarar o método default como
abstractouvirtual– 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...