Junior
Rääkige Swift keele klasside pärilikketsest.
sobes.tech AI
Vastus AI-lt
Swiftis pärivad kõik klassid automaatselt põhiklassist NSObject, isegi kui see pole selgelt näidatud. See eristab Swiftit mõnest teisest keelest, kus võib olla mitu juurklassi.
Päriluse ahel kujutab hierarhiat, kus iga klass pärib omadused ja meetodid oma vanemklassilt (superklassilt). Klassil võib olla ainult üks otsene superklass.
Näide:
// Põhiklass (pärib automaatselt `NSObject`-ist)
class Animal {
var name: String
init(name: String) {
self.name = name
}
func makeSound() {
print("Teadmata looma hääl")
}
}
// Dog klass pärib Animalilt
class Dog: Animal {
let breed: String
init(name: String, breed: String) {
self.breed = breed
super.init(name: name) // Superklassi initsialiseerija kutsumine
}
override func makeSound() { // Superklassi meetodi ülekirjutamine
print("Haug-haug")
}
}
// Poodle klass pärib Dogilt
class Poodle: Dog {
var isHypoallergenic: Bool
init(name: String, breed: String, isHypoallergenic: Bool) {
self.isHypoallergenic = isHypoallergenic
super.init(name: name, breed: breed) // Superklassi initsialiseerija kutsumine
}
// Poodle ei ülekirjuta makeSound, pärib selle Dogilt
}
let myDog = Dog(name: "Buddy", breed: "Labrador")
myDog.makeSound() // Väljund: Haug-haug
let myPoodle = Poodle(name: "Lucy", breed: "Miniature Poodle", isHypoallergenic: true)
myPoodle.makeSound() // Väljund: Haug-haug - pärib Dogilt
Peamised punktid:
- Pärimine:
B: Atähendab, et klassBpärib klassiltA. - Superklass: klass, millest pärandatakse. Näites on
AnimalsuperklassDogjaoks, jaDogon superklassPoodlejaoks. - Alklass: klass, mis pärib teiselt klassilt. Näites on
DogalklassAnimal-lt, jaPoodleon alklassDog-ilt. super: kasutatakse superklassi meetodite või initsialiseerijate kasutamiseks.override: märksõna, mida kasutatakse superklassi meetodite või omaduste ülekirjutamiseks alklassides.final: modifikaator, mida saab rakendada klassile, meetodile või omadusele, et keelata selle ülekirjutamine või pärimine.
Päriluse ahel võimaldab koodi taaskasutust, spetsialiseeritud klassiversioonide loomist ning andmestruktuuri hierarhilist korraldamist.