Sobes.tech
Middle

Kuo skiriasi abstrakti klasė nuo sąsajos?

sobes.tech AI

Atsakymas iš AI

Abstracti klasė — tai klasė, kuri gali turėti tiek įgyvendintus metodus, tiek abstrakčius (be įgyvendinimo) metodus. Ji tarnauja kaip pagrindas paveldėjimui ir gali turėti būseną (laukus).

Sąsaja (Interface) — tai sutartis, kuri apibrėžia metodų rinkinį be įgyvendinimo (klasikinėje sampratoje). Klasė, įgyvendinanti sąsają, privalo įgyvendinti visus jos metodus.

Pagrindiniai skirtumai:

  • Abstrakti klasė gali turėti įgyvendinimą ir būseną, sąsaja — tik metodų parašus (kai kuriose kalbose, sąsajos gali turėti numatytus metodus).
  • Viena klasė gali paveldėti tik iš vienos abstrakčios klasės, bet gali įgyvendinti kelias sąsajas.
  • Abstrakti klasė suteikia dalinį įgyvendinimą, sąsaja — tik sutartį.

Pavyzdys Java kalba:

abstract class Animal {
    void eat() { System.out.println("Valgo"); }
    abstract void sound();
}

interface Flyable {
    void fly();
}

class Bird extends Animal implements Flyable {
    void sound() { System.out.println("Čirč"); }
    public void fly() { System.out.println("Skraido"); }
}