Junior
Povězte o řetězci dědičnosti tříd v jazyce Swift.
sobes.tech AI
Odpověď od AI
V Swiftu všechny třídy implicitně dědí od základní třídy NSObject, i když to není výslovně uvedeno. To odlišuje Swift od některých jiných jazyků, kde může být několik kořenových tříd.
Řetězec dědění představuje hierarchii, kde každá třída dědí vlastnosti a metody od své rodičovské třídy (superclass). Třída může mít pouze jednoho přímého supertřídu.
Příklad:
// Základní třída (implicitně dědí od NSObject)
class Animal {
var name: String
init(name: String) {
self.name = name
}
func makeSound() {
print("Neznámý zvuk zvířete")
}
}
// Třída Dog dědí od Animal
class Dog: Animal {
let breed: String
init(name: String, breed: String) {
self.breed = breed
super.init(name: name) // Volání inicializátoru supertřídy
}
override func makeSound() { // Přepsání metody supertřídy
print("Hav-hav")
}
}
// Třída Poodle dědí od Dog
class Poodle: Dog {
var isHypoallergenic: Bool
init(name: String, breed: String, isHypoallergenic: Bool) {
self.isHypoallergenic = isHypoallergenic
super.init(name: name, breed: breed) // Volání inicializátoru supertřídy
}
// Poodle nepřepisuje makeSound, dědí jej od Dog
}
let myDog = Dog(name: "Buddy", breed: "Labrador")
myDog.makeSound() // Vypíše: Hav-hav
let myPoodle = Poodle(name: "Lucy", breed: "Miniature Poodle", isHypoallergenic: true)
myPoodle.makeSound() // Vypíše: Hav-hav - dědí od Dog
Klíčové body:
- Dědění: Třída
B: Aznamená, že třídaBdědí od třídyA. - Supertřída: Třída, od které dědí. V příkladu
Animalje supertřídou proDog, aDogje supertřídou proPoodle. - Podtřída: Třída, která dědí od jiné třídy. V příkladu
Dogje podtřídouAnimal, aPoodleje podtřídouDog. super: Používá se pro přístup k implementaci metod nebo inicializátorů supertřídy.override: Klíčové slovo používané k přepsání metod nebo vlastností supertřídy v podtřídě.final: Modifikátor, který lze použít na třídu, metodu nebo vlastnost, aby se zakázalo její přepsání nebo dědění.
Tabulka ilustrující řetězec dědění v příkladu:
| Třída | Dědí od | Přepisuje makeSound? |
|---|---|---|
NSObject |
- | Ne |
Animal |
NSObject |
Ne |
Dog |
Animal |
Ano |
Poodle |
Dog |
Ne |
Řetězec dědění umožňuje opětovné použití kódu, vytváření specializovaných verzí tříd a organizaci dat ve hierarchické struktuře.