🎯 Objetivo: Neste capítulo, você vai aprender como a herança permite reutilizar código em C#, facilitando a manutenção e a organização do sistema. Você criará classes "base" (ou superclasses) e "derivadas" (ou subclasses), aproveitando atributos e métodos já existentes.


🧠 O que é Herança?

Herança é um dos quatro pilares da Programação Orientada a Objetos. É um mecanismo que permite criar novas classes baseadas em outras já existentes. Com a herança, você pode evitar a repetição de código e modelar relações do tipo "é um" (por exemplo, "um Cachorro é um Animal").

Exemplo do mundo real:

Imagine uma classe Animal que representa características e comportamentos gerais. A partir dela, você pode criar classes mais específicas, como Cachorro, Gato ou Pássaro. Eles herdam as características de Animal e adicionam as suas próprias.


📌 Sintaxe da Herança em C#

Para criar uma herança em C#, usamos o caractere : após o nome da classe derivada, seguido pelo nome da classe base.

// Classe Base (Superclasse)
public class SuperClasse
{
    // atributos e métodos
}
// Classe Derivada (Subclasse)
public class SubClasse : SuperClasse
{
    // novos atributos e métodos
}

🧪 Exemplo 1 – Criando uma Classe Base Animal e Classes Derivadas

Vamos criar uma classe base Animal e duas classes derivadas, Cachorro e Gato.

Classe Animal

public class Animal
{
    public string Nome { get; set; }

    public void EmitirSom()
    {
        Console.WriteLine("O animal faz um som.");
    }
}

Agora, vamos criar as classes derivadas. Observe a sintaxe:

Classe Cachorro

public class Cachorro : Animal
{
    // O Cachorro já herda a propriedade Nome e o método EmitirSom().
}

Classe Gato

public class Gato : Animal
{
    // O Gato também herda a propriedade Nome e o método EmitirSom().
}

🧪 Exemplo 2 - Hierarquia de Herança

Diagrama de Classe

classDiagram
		direction LR
    class Animal {
        - nome : String
        + Animal(nome : String)
        + emitirSom() : void
        + exibirInfo() : void
    }

    class Cachorro {
        - raca : String
        + Cachorro(nome : String, raca : String)
        + emitirSom() : void
        + exibirInfo() : void
    }

    class PastorAlemao {
        - farejador : boolean
        + PastorAlemao(nome : String, farejador : boolean)
        + emitirSom() : void
        + exibirInfo() : void
    }

    Animal <|-- Cachorro
    Cachorro <|-- PastorAlemao