Menu
Coddy logo textTech

Sintaxe Básica de Herança (:)

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 19 de 70.

A herança permite que uma classe adquira as propriedades e métodos de outra classe. Em vez de reescrever o mesmo código, você cria uma classe base (pai) com funcionalidade compartilhada e, em seguida, cria classes derivadas (filhas) que herdam dela.

Em C#, você usa o símbolo de dois pontos : para indicar herança:

public class Animal
{
    public string Name { get; set; }
    
    public void Eat()
    {
        Console.WriteLine($"{Name} is eating.");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine($"{Name} says Woof!");
    }
}

A classe Dog herda tudo de Animal. Ela tem acesso à propriedade Name e ao método Eat() sem declará-los novamente, além de adicionar seu próprio método Bark():

Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat();   // Saída: Buddy está comendo.
myDog.Bark();  // Saída: Buddy diz Woof!

O C# suporta apenas herança única, o que significa que uma classe pode herdar de apenas uma classe base. No entanto, você pode construir cadeias de herança onde uma classe derivada se torna a base para outra classe. Isso cria uma hierarquia que modela relacionamentos do mundo real, mantendo seu código organizado e reutilizável.

challenge icon

Desafio

Fácil

Vamos construir uma hierarquia de veículos que demonstra como a herança permite que classes derivadas compartilhem funcionalidades de uma classe base, enquanto adicionam seus próprios comportamentos exclusivos.

Você criará três arquivos para organizar seu código:

  • Vehicle.cs: Defina uma classe Vehicle no namespace Transport. Esta será sua classe base que todos os veículos compartilham. Ela deve ter uma propriedade Brand (string) e uma propriedade Year (int), juntamente com um método StartEngine() que imprime "{Brand} engine started."
  • Car.cs: Defina uma classe Car no namespace Transport que herda de Vehicle. O carro adiciona sua própria propriedade NumberOfDoors (int) e um método Honk() que imprime "{Brand} goes Beep Beep!"
  • Program.cs: No seu arquivo principal, crie uma instância de Car usando valores de entrada. Defina suas propriedades (incluindo as herdadas) e, em seguida, demonstre que o carro pode usar tanto seus próprios métodos quanto os métodos que herdou de Vehicle.

Você receberá três entradas:

  • Nome da marca (Brand name)
  • Ano (Year)
  • Número de portas (Number of doors)

Imprima as informações do carro e demonstre suas capacidades neste formato:

Car: {Brand} ({Year})
Doors: {NumberOfDoors}
{StartEngine output}
{Honk output}

Por exemplo, se as entradas forem Toyota, 2022 e 4, a saída deve ser:

Car: Toyota (2022)
Doors: 4
Toyota engine started.
Toyota goes Beep Beep!

Observe como seu Car pode acessar a propriedade Brand e o método StartEngine(), embora eles estejam definidos em Vehicle. Esse é o poder da herança - a classe derivada obtém automaticamente tudo de sua classe base!

Folha de consulta

A herança permite que uma classe adquira propriedades e métodos de outra classe usando o símbolo de dois pontos ::

public class Animal
{
    public string Name { get; set; }
    
    public void Eat()
    {
        Console.WriteLine($"{Name} is eating.");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine($"{Name} says Woof!");
    }
}

A classe derivada (Dog) herda todas as propriedades e métodos da classe base (Animal) e pode adicionar os seus próprios:

Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat();   // Inherited method
myDog.Bark();  // Own method

O C# suporta apenas herança única - uma classe pode herdar de apenas uma classe base. No entanto, você pode criar cadeias de herança para construir hierarquias.

Experimente você mesmo

using System;
using Transport;

class Program
{
    public static void Main(string[] args)
    {
        // Ler a entrada
        string brand = Console.ReadLine();
        int year = Convert.ToInt32(Console.ReadLine());
        int doors = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Criar uma instância de Car
        
        // TODO: Definir as propriedades do carro (Brand, Year, NumberOfDoors)
        
        // TODO: Imprimir as informações do carro no formato exigido:
        // Car: {Brand} ({Year})
        // Doors: {NumberOfDoors}
        // Em seguida, chamar StartEngine() e Honk()
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos