Junior — Middle
Mi a különbség az absztrakt osztály és az interfész használata között osztályok szerződéseinek meghatározásakor?
sobes.tech MI
Válasz az MI-től
A C#-ban az absztrakt osztály és az interfész szerződések meghatározására szolgál, de lényeges különbségekkel rendelkezik:
- Absztrakt osztály tartalmazhat metódusokat, mezőket, konstruktorokat és tulajdonságokat megvalósítással. Akkor használják, amikor alapértelmezett megvalósítást és közös funkcionalitást szeretnénk meghatározni az örökösök számára.
- Interfész csak a metódusok, tulajdonságok és események szignatúráit határozza meg, megvalósítás nélkül (C# 8.0-ig; a C# 8.0-tól kezdve az interfészek tartalmazhatnak alapértelmezett megvalósításokat).
Ezenkívül egy osztály csak egy absztrakt osztályból örökölhet, de több interfészt is megvalósíthat.
Példa:
abstract class Animal
{
public abstract void MakeSound();
public void Sleep() { Console.WriteLine("Alszik"); }
}
interface IFlyable
{
void Fly();
}
class Bird : Animal, IFlyable
{
public override void MakeSound() { Console.WriteLine("Csiripelés"); }
public void Fly() { Console.WriteLine("Repül"); }
}
Így az absztrakt osztály alkalmas az általános alap viselkedésre, míg az interfész egy olyan képességkészletet határoz meg, amelyet különböző osztályok valósíthatnak meg.