Capítulo 17: Classes Abstratas 🌌🛡️
Neste capítulo, vamos aprender sobre as Classes Abstratas no C#. Elas servem como moldes incompletos que não podem ser criados diretamente, apenas herdados, com o tema de Armas de RPG!
📖 O que é uma Classe Abstrata?
Uma classe abstrata é uma classe que não pode ser instanciada (você não pode dar new nela). Ela serve apenas como base para outras classes. Além disso, ela pode ter métodos abstratos (sem corpo), que as classes filhas são OBRIGADAS a implementar.
📖 Exemplo Guiado: O Molde da Arma
Vamos criar uma classe abstrata Arma e fazer as classes Espada e Arco herdarem dela.
- Crie o arquivo
rpg_abstrato.csna pastasrc/:
using System;
// Código principal
Espada excalibur = new Espada("Excalibur");
excalibur.ExibirInfo();
excalibur.Usar();
Arco arcoSimples = new Arco("Arco Curvo");
arcoSimples.ExibirInfo();
arcoSimples.Usar();
// Classe Abstrata (não pode dar 'new'!)
public abstract class Arma {
public string Nome { get; set; }
public Arma(string nome) { Nome = nome; }
// Método Abstrato (sem corpo, filhas devem implementar)
public abstract void Usar();
// Método normal (pode ter corpo)
public void ExibirInfo() {
Console.WriteLine($"Arma: {Nome}");
}
}
public class Espada : Arma {
public Espada(string nome) : base(nome) { }
// Usamos 'override' para implementar o método abstrato
public override void Usar() {
Console.WriteLine($"{Nome} desferiu um golpe cortante! ⚔️");
}
}
public class Arco : Arma {
public Arco(string nome) : base(nome) { }
public override void Usar() {
Console.WriteLine($"{Nome} disparou uma flecha certeira! 🏹");
}
}🕹️ Como Executar e Testar no VS Code
- Execute le projeto usando
dotnet run.
Resultado Esperado:
Arma: Excalibur
Excalibur desferiu um golpe cortante! ⚔️
Arma: Arco Curvo
Arco Curvo disparou uma flecha certeira! 🏹📊 Ilustração Visual: Classe Abstrata
A classe abstrata fica no topo e não gera objetos diretamente:
classDiagram class Arma { "<<abstract>>" +String Nome +Usar()* +ExibirInfo() } class Espada { +Usar() } class Arco { +Usar() } Arma <|-- Espada Arma <|-- Arco
🛠️ Prática Obrigatória 1: Pergaminho Mágico
Crie uma classe abstrata ItemMagico com a propriedade Nome e o método abstrato Usar(). Crie uma classe filha Pergaminho que implemente o Usar() exibindo “Pergaminho queimou e lançou a magia!“. Teste na main.
🔑 Gabarito de Código
Prática 1: pergaminho_abstrato.cs
using System;
Pergaminho p = new Pergaminho("Pergaminho de Teleporte");
p.Usar();
public abstract class ItemMagico {
public string Nome { get; set; }
public ItemMagico(string nome) { Nome = nome; }
public abstract void Usar();
}
public class Pergaminho : ItemMagico {
public Pergaminho(string nome) : base(nome) { }
public override void Usar() {
Console.WriteLine($"{Nome} queimou e lancou a magia de teleporte!");
}
}