Sobes.tech
Junior — Middle

Mis on peamine erinevus abstraktse klassi ja liidese vahel objektorienteeritud programmeerimises?

sobes.tech AI

Vastus AI-lt

Peamine erinevus abstraktse klassi ja liidese vahel on see, et abstraktne klass võib sisaldada meetodite rakendusi ja olekut (välju), samas kui liides määratleb ainult meetodite allkirjad ilma rakenduseta (kuni C# 8.0). Abstraktset klassi kasutatakse siis, kui on vaja määratleda alusimplementatsioon ja ühine funktsionaalsus pärijatele, ning liidest kasutatakse lepingu määratlemiseks, mida klassid peavad täitma, sõltumata nende hierarhiast.

Näide:

// Abstraktne klass
public abstract class Animal {
    public void Eat() {
        Console.WriteLine("Sööb");
    }
    public abstract void MakeSound();
}

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

// Klass, mis pärib abstraktse klassi ja rakendab liidest
public class Dog : Animal, IMovable {
    public override void MakeSound() {
        Console.WriteLine("Haugub");
    }
    public void Move() {
        Console.WriteLine("Jookseb");
    }
}