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.