Sobes.tech
Junior — Middle

Qual è la principale differenza tra una classe astratta e un'interfaccia nella programmazione orientata agli oggetti?

sobes.tech AI

Risposta dell'AI

La principale differenza tra una classe astratta e un'interfaccia è che la classe astratta può contenere implementazioni di metodi e stato (campi), mentre l'interfaccia definisce solo le firme dei metodi senza implementazione (fino a C# 8.0). La classe astratta viene utilizzata quando si desidera impostare un'implementazione di base e funzionalità comuni per gli eredi, mentre l'interfaccia serve a definire un contratto che le classi devono rispettare, indipendentemente dalla loro gerarchia.

Esempio:

// Classe astratta
public abstract class Animal {
    public void Eat() {
        Console.WriteLine("Mangiare");
    }
    public abstract void MakeSound();
}

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

// Classe che eredita da una classe astratta e implementa l'interfaccia
public class Dog : Animal, IMovable {
    public override void MakeSound() {
        Console.WriteLine("Abbaio");
    }
    public void Move() {
        Console.WriteLine("Correre");
    }
}