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.