Sobes.tech
Junior — Middle

Jaký je rozdíl mezi rozhraním a abstraktní třídou v kontextu objektově orientovaného programování?

sobes.tech AI

Odpověď od AI

Rozhraní a abstraktní třída jsou dva způsoby, jak definovat abstrakce v objektově orientovaném programování, ale mají klíčové rozdíly:

  • Rozhraní popisuje sadu metod, které musí třída implementovat, ale neobsahuje implementaci (ačkoli v některých jazycích jsou možné metody s výchozí implementací). Rozhraní nemůže obsahovat stav (proměnné instance).
  • Abstraktní třída může obsahovat jak abstraktní metody (bez implementace), tak metody s implementací. Také může obsahovat pole (stav).

Příklad v Swift:

protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("Motor spuštěn")
    }
}

// Abstraktní třída v Swift je realizována přes třídu s metodami, které je třeba přepsat
class Animal {
    func makeSound() {
        fatalError("Tato metoda musí být přepsána")
    }
}

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

Tímto způsobem rozhraní stanoví smlouvu, a abstraktní třída může poskytovat částečnou implementaci a uchovávat stav.