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.