Sobes.tech
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.