Abstract
Abstrakta klasser
En abstrakt klass kan aldrig instansieras, utan kan bara användas som basklass för arv.
abstract class Character
{
public string Name;
public int Hp = 100;
public void Hurt(int amount)
{
Hp -= amount;
}
}class Hero: Character
{
int _xp = 0;
int _level = 1;
public void AddExperience(int amount)
{
_xp += amount;
_level = 1 + _xp / 10;
}
}Abstrakta metoder
Den huvudsakliga anledningen till att göra en basklass abstrakt är för att man vill kunna använda sig av abstrakta metoder. En abstrakt metod saknar kod, och måste overridas i alla subklasser. Det är med andra ord ett sätt att tvinga de som skapar subklasser att bygga egna versioner av den metoden.
Abstrakta metoder fungerar bäst i de fall där det inte finns någon lämplig "standardversion" av metoden som kan ingå i basklassen
I exemplet ovan är det alltså tänkt att metoden LevelUp ska anropas för att ge karaktärer ny level, ifall de fått tillräckligt med xp. I och med att olika karaktärer ska ha olika progression baserat på vilken klass de tillhör (t.ex. Warrior) så kan man låta LevelUp-metoden vara abstrakt och ha en egen implementation för varje subklass.
Last updated
Was this helpful?