Sobes.tech
Middle

În ce cazuri trebuie să folosiți o interfață și în care o clasă abstractă?

sobes.tech AI

Răspuns de la AI

Utilizați interfețe pentru a defini contractul de comportament pe care îl pot implementa clasele. Acest lucru permite atingerea polimorfismului și slăbește cuplarea între clase. O clasă poate avea mai multe interfețe, dar doar o clasă de bază.

Utilizați clase abstracte atunci când aveți o implementare comună a unei părți din funcționalitate și doriți să oferiți o structură de bază pentru clasele derivate. Clasele abstracte pot conține metode abstracte și normale, precum și câmpuri. Sunt potrivite atunci când este necesară moștenirea "este".

Caracteristică Interfață Clasă abstractă
Moștenire multiplă Da Nu
Implementare Nu (până la .NET 8 cu metode de interfață implicite) Da, parțial sau complet
Câmpuri Nu Da
Constructori Nu Da
Tip relație "poate face" ("has-a") "este" ("is-a")

Exemplu de utilizare a interfeței:

// Definim un contract pentru obiecte care pot zbura
public interface IFlyable
{
    void Fly();
}

// Clasa avion implementează interfața IFlyable
public class Airplane : IFlyable
{
    public void Fly()
    {
        // Implementarea zborului avionului
        Console.WriteLine("Avionul zboară");
    }
}

// Clasa pasăre implementează și ea interfața IFlyable
public class Bird : IFlyable
{
    public void Fly()
    {
        // Implementarea zborului păsării
        Console.WriteLine("Pasărea zboară");
    }
}

Exemplu de utilizare a unei clase abstracte:

// Clasă abstractă Animal cu o implementare comună a respirației
public abstract class Animal
{
    public void Breathe()
    {
        Console.WriteLine("Animalul respiră");
    }

    // Metodă abstractă pe care trebuie să o implementeze clasele derivate
    public abstract void MakeSound();
}

// Clasă concretă de câine care moștenește de la Animal
public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Ham!");
    }
}

// Clasă concretă de pisică care moștenește de la Animal
public class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Miau!");
    }
}