Sobes.tech
Junior — Middle

Aký je hlavný rozdiel medzi abstraktnou triedou a rozhraním v objektovo orientovanom programovaní?

sobes.tech AI

Odpoveď od AI

Hlavný rozdiel medzi abstraktnou triedou a rozhraním je ten, že abstraktná trieda môže obsahovať implementácie metód a stav (pole), zatiaľ čo rozhranie definuje iba podpisy metód bez implementácie (až do C# 8.0). Abstraktná trieda sa používa, keď je potrebné stanoviť základnú implementáciu a spoločnú funkčnosť pre dedičov, zatiaľ čo rozhranie na definovanie zmluvy, ktorú musia splniť triedy, bez ohľadu na ich hierarchiu.

Príklad:

// Abstraktná trieda
public abstract class Animal {
    public void Eat() {
        Console.WriteLine("Je");
    }
    public abstract void MakeSound();
}

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

// Trieda, ktorá dedí z abstraktnej triedy a implementuje rozhranie
public class Dog : Animal, IMovable {
    public override void MakeSound() {
        Console.WriteLine("Šteká");
    }
    public void Move() {
        Console.WriteLine("Behá");
    }
}