Capítulo 11: Herança (Reutilização de Código) 🛡️🗡️

Neste capítulo, vamos aprender sobre Herança no C#. Ela nos permite criar novas classes baseadas em classes já existentes, aproveitando seus atributos e métodos, com o tema de Classes de RPG!


📖 O que é Herança?

Herança é um pilar da Orientação a Objetos que permite que uma classe (chamada de Classe Filha ou Subclasse) herde os comportamentos e características de outra classe (chamada de Classe Pai ou Superclasse).

No C#, usamos o símbolo de dois pontos : para indicar herança.


📖 Exemplo Guiado: Criando a Classe Guerreiro

Vamos criar uma classe base chamada Heroi e uma classe filha chamada Guerreiro que herda de Heroi e ganha habilidades específicas!

  1. Crie o arquivo rpg_heranca.cs na pasta src/:
using System;
 
// Código principal
Guerreiro arthur = new Guerreiro("Arthur", 100, 50);
 
// Arthur pode usar métodos da classe Pai!
arthur.ExibirStatus(); 
 
// E também seus próprios métodos!
arthur.Atacar();
 
// Classe Pai (Base)
public class Heroi {
    public string Nome { get; set; }
    public int Vida { get; set; }
 
    public Heroi(string nome, int vida) {
        Nome = nome;
        Vida = vida;
    }
 
    public void ExibirStatus() {
        Console.WriteLine($"{Nome} | Vida: {Vida}");
    }
}
 
// Classe Filha (Derivada)
// Guerreiro HERDA de Heroi
public class Guerreiro : Heroi {
    public int Forca { get; set; }
 
    // O construtor chama o construtor do pai usando 'base'
    public Guerreiro(string nome, int vida, int forca) : base(nome, vida) {
        Forca = forca;
    }
 
    public void Atacar() {
        Console.WriteLine($"{Nome} atacou com a espada causando {Forca} de dano! ⚔️");
    }
}

🕹️ Como Executar e Testar no VS Code

  1. Execute o projeto usando dotnet run.

Resultado Esperado:

Arthur | Vida: 100
Arthur atacou com a espada causando 50 de dano! ⚔️

📊 Ilustração Visual: Hierarquia de Herança

O Guerreiro “é um” Herói:

classDiagram
    class Heroi {
        +String Nome
        +int Vida
        +ExibirStatus()
    }
    class Guerreiro {
        +int Forca
        +Atacar()
    }
    Heroi <|-- Guerreiro

🛠️ Prática Obrigatória 1: O Mago

Crie uma classe chamada Mago que também herde de Heroi. Ela deve ter um atributo extra chamado Mana (int) e um método LancarMagia() (exibindo algo como “Mago lançou magia gastando X de mana”). Instancie um mago e teste na main!


🔑 Gabarito de Código

Prática 1: mago_heranca.cs

using System;
 
Mago merlin = new Mago("Merlin", 80, 50);
merlin.ExibirStatus();
merlin.LancarMagia();
 
public class Heroi {
    public string Nome { get; set; }
    public int Vida { get; set; }
 
    public Heroi(string nome, int vida) {
        Nome = nome;
        Vida = vida;
    }
 
    public void ExibirStatus() {
        Console.WriteLine($"{Nome} | Vida: {Vida}");
    }
}
 
public class Mago : Heroi {
    public int Mana { get; set; }
 
    public Mago(string nome, int vida, int mana) : base(nome, vida) {
        Mana = mana;
    }
 
    public void LancarMagia() {
        Console.WriteLine($"{Nome} lancou uma Bola de Fogo gastando {Mana} de mana! 🔥");
    }
}

Capitulo Anterior | Proximo Capitulo