Sobes.tech
Junior — Middle

Jaka jest różnica między interfejsem a klasą abstrakcyjną w kontekście programowania obiektowego?

sobes.tech AI

Odpowiedź od AI

Interfejs i klasa abstrakcyjna to dwa sposoby definiowania abstrakcji w programowaniu obiektowym, ale mają kluczowe różnice:

  • Interfejs opisuje zestaw metod, które klasa musi zaimplementować, ale nie zawiera implementacji (chociaż w niektórych językach możliwe są metody z domyślną implementacją). Interfejs nie może zawierać stanu (zmiennych instancji).
  • Klasa abstrakcyjna może zawierać zarówno metody abstrakcyjne (bez implementacji), jak i metody z implementacją. Może również zawierać pola (stan).

Przykład w Swift:

protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("Silnik uruchomiony")
    }
}

// Klasa abstrakcyjna w Swift jest realizowana przez klasę z metodami do nadpisania
class Animal {
    func makeSound() {
        fatalError("Ta metoda musi być nadpisana")
    }
}

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

W ten sposób, interfejs ustala kontrakt, a klasa abstrakcyjna może zapewniać częściową implementację i przechowywać stan.