Junior — Middle
Koja je razlika između interfejsa i apstraktne klase u kontekstu objektno-orijentisanog programiranja?
sobes.tech АИ
Одговор од АИ
Interfejs i apstraktna klasa su dva načina za definisanje apstrakcija u objektno-orijentisanom programiranju, ali imaju ključne razlike:
- Interfejs opisuje skup metoda koje klasa mora implementirati, ali ne sadrži implementaciju (iako u nekim jezicima su moguće metode sa podrazumevanom implementacijom). Interfejs ne može sadržavati stanje (promenljive instance).
- Apstraktna klasa može sadržavati i apstraktne metode (bez implementacije) i metode sa implementacijom. Takođe može sadržavati polja (stanje).
Primer u Swift:
protocol Vehicle {
func startEngine()
}
class Car: Vehicle {
func startEngine() {
print("Motor pokrenut")
}
}
// Apstraktna klasa u Swift se implementira putem klase sa metodama koje je potrebno prepisati
class Animal {
func makeSound() {
fatalError("Ova metoda mora biti prepisana")
}
}
class Dog: Animal {
override func makeSound() {
print("Hav")
}
}
Na ovaj način, interfejs postavlja ugovor, a apstraktna klasa može pružiti delimičnu implementaciju i čuvati stanje.