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!
- Crie o arquivo
rpg_heranca.csna pastasrc/:
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
- 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! 🔥");
}
}