Junior
Vorbește despre lanțul de moștenire a claselor în limbajul Swift.
sobes.tech AI
Răspuns de la AI
În Swift, toate clasele moștenesc implicit de la clasa de bază NSObject, chiar dacă acest lucru nu este indicat explicit. Acest lucru diferențiază Swift de unele alte limbaje, unde pot exista mai multe clase rădăcină.
Lanțul de moștenire reprezintă o ierarhie în care fiecare clasă moștenește proprietăți și metode de la clasa sa părinte (superclasă). O clasă poate avea doar o singură superclasă directă.
Exemplu:
// Clasa de bază (moștenește implicit de la NSObject)
class Animal {
var name: String
init(name: String) {
self.name = name
}
func makeSound() {
print("Sunet necunoscut al animalului")
}
}
// Clasa Dog moștenește de la Animal
class Dog: Animal {
let breed: String
init(name: String, breed: String) {
self.breed = breed
super.init(name: name) // Apelarea inițializatorului superclasei
}
override func makeSound() { // Suprascrierea metodei superclasei
print("Ham-ham")
}
}
// Clasa Poodle moștenește de la Dog
class Poodle: Dog {
var isHypoallergenic: Bool
init(name: String, breed: String, isHypoallergenic: Bool) {
self.isHypoallergenic = isHypoallergenic
super.init(name: name, breed: breed) // Apelarea inițializatorului superclasei
}
// Poodle nu suprascrie makeSound, moștenește de la Dog
}
let myDog = Dog(name: "Buddy", breed: "Labrador")
myDog.makeSound() // Afișează: Ham-ham
let myPoodle = Poodle(name: "Lucy", breed: "Miniature Poodle", isHypoallergenic: true)
myPoodle.makeSound() // Afișează: Ham-ham - moștenește de la Dog
Puncte cheie:
- Moștenire: Clasa
B: Aindică faptul că clasaBmoștenește de laA. - Superclasă: Clasa de la care se moștenește. În exemplu,
Animaleste superclasa pentruDog, iarDogeste superclasa pentruPoodle. - Subclasă: Clasa care moștenește de la o altă clasă. În exemplu,
Dogeste subclasă deAnimal, iarPoodleeste subclasă deDog. super: Se folosește pentru a accesa implementarea metodelor sau inițializatorilor superclasei.override: Cuvânt cheie folosit pentru a suprascrie metodele sau proprietățile superclasei în subclasă.final: Modificator care poate fi aplicat unei clase, metode sau proprietăți pentru a interzice suprascrierea sau moștenirea.
Tabelul care ilustrează lanțul de moștenire în exemplu:
| Clasă | Moștenește de la | Suprascrie makeSound? |
|---|---|---|
NSObject |
- | Nu |
Animal |
NSObject |
Nu |
Dog |
Animal |
Da |
Poodle |
Dog |
Nu |
Lanțul de moștenire permite reutilizarea codului, crearea de versiuni specializate ale claselor și organizarea structurii datelor în mod ierarhic.