Sobes.tech
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.