Junior — Middle
Aký je rozdiel medzi rozhraním a abstraktnou triedou v kontexte objektovo orientovaného programovania?
sobes.tech AI
Odpoveď od AI
Rozhranie a abstraktná trieda sú dva spôsoby, ako definovať abstrakcie v objektovo orientovanom programovaní, ale majú kľúčové rozdiely:
- Rozhranie opisuje súbor metód, ktoré musí trieda implementovať, ale neobsahuje implementáciu (hoci v niektorých jazykoch sú možné metódy s predvolenou implementáciou). Rozhranie nemôže obsahovať stav (premenné inštancie).
- Abstraktná trieda môže obsahovať ako abstraktné metódy (bez implementácie), tak aj metódy s implementáciou. Môže tiež obsahovať polia (stav).
Príklad v Swift:
protocol Vehicle {
func startEngine()
}
class Car: Vehicle {
func startEngine() {
print("Motor spustený")
}
}
// Abstraktná trieda v Swift je realizovaná cez triedu s metódami, ktoré je potrebné prepísať
class Animal {
func makeSound() {
fatalError("Táto metóda musí byť prepísaná")
}
}
class Dog: Animal {
override func makeSound() {
print("Hav")
}
}
Týmto spôsobom, rozhranie stanoví zmluvu, a abstraktná trieda môže poskytovať čiastočnú implementáciu a uchovávať stav.