Sobes.tech
Middle

Care este diferența dintre o clasă abstractă și o interfață?

sobes.tech AI

Răspuns de la AI

Clasa abstractă — este o clasă care poate conține atât metode implementate, cât și metode abstracte (fără implementare). Servește ca bază pentru moștenire și poate conține stare (câmpuri).

Interfață — este un contract care definește un set de metode fără implementare (în înțelesul clasic). Clasa care implementează interfața trebuie să implementeze toate metodele sale.

Diferențele principale:

  • Clasa abstractă poate conține implementare și stare, interfața — doar semnături de metode (în unele limbaje, interfețele pot conține metode implicite).
  • O clasă poate moșteni doar de la o singură clasă abstractă, dar poate implementa mai multe interfețe.
  • Clasa abstractă oferă o implementare parțială, interfața — doar contractul.

Exemplu în Java:

abstract class Animal {
    void eat() { System.out.println("Mănâncă"); }
    abstract void sound();
}

interface Flyable {
    void fly();
}

class Bird extends Animal implements Flyable {
    void sound() { System.out.println("Ciripit"); }
    public void fly() { System.out.println("Zboară"); }
}