Sobes.tech
Junior — Middle

У чему се састоји разлика између коришћења апстрактне класе и интерфејса при дефинисању уговора за класе?

sobes.tech АИ

Одговор од АИ

Apstraktna klasa i interfejs u C# služe za definisanje ugovora, ali imaju ključne razlike:

  • Apstraktna klasa može sadržavati implementacije metoda, polja, konstruktora i svojstava. Koristi se kada je potrebno odrediti osnovnu implementaciju i zajedničku funkcionalnost za naslednike.
  • Interfejs definiše samo potpise metoda, svojstava i događaja bez implementacije (do C# 8.0; od C# 8.0 nadalje, interfejsi mogu sadržavati podrazumevanu implementaciju).

Takođe, klasa može naslediti samo od jedne apstraktne klase, ali može implementirati više interfejsa.

Primer:

abstract class Animal
{
    public abstract void MakeSound();
    public void Sleep() { Console.WriteLine("Spava"); }
}

interface IFlyable
{
    void Fly();
}

class Bird : Animal, IFlyable
{
    public override void MakeSound() { Console.WriteLine("Cvrkut"); }
    public void Fly() { Console.WriteLine("Leti"); }
}

Na ovaj način, apstraktna klasa je pogodna za opšte osnovno ponašanje, a interfejs za definisanje skupa mogućnosti koje mogu implementirati različite klase.