Junior — Middle
Milline on erinevus abstraktse klassi ja liidese kasutamisel klasside lepingute määratlemisel?
sobes.tech AI
Vastus AI-lt
C# keeles teenivad abstraktne klass ja liides lepingute määratlemiseks, kuid neil on põhierinevused:
- Abstraktne klass võib sisaldada meetodite, väljade, konstruktorite ja omaduste rakendusi. Seda kasutatakse siis, kui on vaja määratleda alus- ja üldine funktsionaalsus pärijatele.
- Liides määratleb ainult meetodite, omaduste ja sündmuste allkirjad ilma rakenduseta (kuni C# 8.0; alates C# 8.0 võivad liidesed sisaldada vaikimisi rakendusi).
Lisaks võib klass pärida ainult ühest abstraktsest klassist, kuid rakendada mitmeid liideseid.
Näide:
abstract class Animal
{
public abstract void MakeSound();
public void Sleep() { Console.WriteLine("Magab"); }
}
interface IFlyable
{
void Fly();
}
class Bird : Animal, IFlyable
{
public override void MakeSound() { Console.WriteLine("Čirči"); }
public void Fly() { Console.WriteLine("Lendab"); }
}
Seega, abstraktne klass sobib üldiseks põhikäitumiseks, ja liides määratleb võimaluste kogumi, mida võivad rakendada erinevad klassid.