Sobes.tech
Junior — Middle

Mis vahe on liidese ja abstraktse klassi vahel objektorienteeritud programmeerimise kontekstis?

sobes.tech AI

Vastus AI-lt

Objektorienteerimise programmeerimises on abstraktsioonide määratlemiseks kaks viisi: liides ja abstraktne klass, kuid neil on olulised erinevused:

  • Liides kirjeldab meetodite kogumi, mida klass peab rakendama, kuid ise ei sisalda rakendust (kuigi mõnedes keeltes on võimalikud vaikimisi rakendusega meetodid). Liides ei saa sisaldada olekut (näidetega muutujad).
  • Abstraktne klass võib sisaldada nii abstraktseid meetodeid (ilma rakenduseta) kui ka meetodeid koos rakendusega. Samuti võib see sisaldada välju (olekut).

Näide Swiftis:

protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("Mootor käivitus")
    }
}

// Abstraktne klass Swiftis realiseeritakse klassiga, mille meetodeid tuleb üle kirjutada
class Animal {
    func makeSound() {
        fatalError("See meetod peab olema üle kirjutatud")
    }
}

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

Seega, liides määrab lepingu, ja abstraktne klass võib pakkuda osalist rakendust ning hoida olekut.