Sobes.tech
Junior — Middle

Jaka jest główna różnica między klasą abstrakcyjną a interfejsem w programowaniu obiektowym?

sobes.tech AI

Odpowiedź od AI

Główna różnica między klasą abstrakcyjną a interfejsem polega na tym, że klasa abstrakcyjna może zawierać implementację metod i stan (pola), podczas gdy interfejs definiuje tylko sygnatury metod bez implementacji (do C# 8.0). Klasa abstrakcyjna jest używana, gdy trzeba ustalić podstawową implementację i wspólną funkcjonalność dla dziedziczących, a interfejs — do określenia kontraktu, który muszą spełniać klasy, niezależnie od ich hierarchii.

Przykład:

// Klasa abstrakcyjna
public abstract class Animal {
    public void Eat() {
        Console.WriteLine("Jedzenie");
    }
    public abstract void MakeSound();
}

// Interfejs
public interface IMovable {
    void Move();
}

// Klasa dziedzicząca po klasie abstrakcyjnej i implementująca interfejs
public class Dog : Animal, IMovable {
    public override void MakeSound() {
        Console.WriteLine("Szczekanie");
    }
    public void Move() {
        Console.WriteLine("Biegać");
    }
}