Sobes.tech
Junior — Middle

Care este diferența dintre o interfață și o clasă abstractă în contextul programării orientate pe obiecte?

sobes.tech AI

Răspuns de la AI

Interfața și clasa abstractă sunt două modalități de a defini abstracții în programarea orientată pe obiect, dar au diferențe cheie:

  • Interfața descrie un set de metode pe care o clasă trebuie să le implementeze, dar nu conține implementare (deși în unele limbaje sunt posibile metode cu implementare implicită). Interfața nu poate conține stare (variabile de instanță).
  • Clasa abstractă poate conține atât metode abstracte (fără implementare), cât și metode cu implementare. De asemenea, poate conține câmpuri (stare).

Exemplu în Swift:

protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("Motor pornit")
    }
}

// Clasa abstractă în Swift se implementează printr-o clasă cu metode ce trebuie suprascrise
class Animal {
    func makeSound() {
        fatalError("Această metodă trebuie suprascrisă")
    }
}

class Dog: Animal {
    override func makeSound() {
        print("Ham")
    }
}

Astfel, interfața stabilește un contract, iar clasa abstractă poate oferi o implementare parțială și poate păstra stare.