Junior
Ինչպես է աշխատում ժառանգությունը Swift լեզվում։
sobes.tech AI
Պատասխան AI-ից
Swift-ում ժառանգությունը իրականացվում է դասերով: Մի դաս կարող է ժառանգել հատկություններ և մեթոդներ մյուս դասից:
- Հիմնական դաս: Դաս, որը մյուս դասերը ժառանգում են: Չի ժառանգում ոչ մեկից:
- Ներածական դաս (ժառանգորդ): Դաս, որը ժառանգում է հիմնական դասից: Կարող է ավելացնել նոր հատկություններ և մեթոդներ, ինչպես նաև վերագրել ժառանգածները:
Մுக்கிய կետեր:
- Swift-ը միայն մեկական ժառանգություն է աջակցում (դասը կարող է ժառանգել միայն մեկ դասից):
- Օգտագործվում է
classբանալի բառը դասի սահմանման համար: - Դասի անունից հետո օգտագործվում է երկվայրկյան
:նշանը, որի հետևում է հիմնական դասի անունը: - Մեթոդների և հատկությունների վերագրումը կատարվում է
overrideբանալի բառով: - Վերագրումը արգելվում է
finalբանալի բառով, որը դրվում է դասի, մեթոդի կամ հատկության առաջ:
// Հիմնական դաս
class Vehicle {
var currentSpeed = 0.0
func accelerate() {
currentSpeed += 10
}
func description() -> String {
return "traveling at \(currentSpeed) mph"
}
}
// Ներածական դաս
class Car: Vehicle {
var gear = 1
// Մեթոդի վերագրում
override func accelerate() {
super.accelerate() // Հիշեցում հիմնական դասի մեթոդը
gear += 1
}
// Նոր մեթոդ ավելացնել
func changeGear(to newGear: Int) {
gear = newGear
}
// Գույքի վերագրում (հաշվարկվող)
override func description() -> String {
return super.description() + " in gear \(gear)"
}
}
// Դաս, որը արգելված է ժառանգելու
final class Motorcycle: Vehicle {
// Կարող է ունենալ սեփական հատկություններ և մեթոդներ, բայց նրանից ժառանգել չի կարելի
}
Ժառանգության առավելություններ:
- Կոդի կրկնորդ օգտագործում: Ժառանգորդները օգտագործում են հիմնական դասի ֆունկցիոնալությունը:
- Պոլիմորֆիզմ: Հնարավորություն է տարբեր ժառանգած դասերի օբյեկտների հետ աշխատել հիմնական դասի հղումով:
- Ընդլայնելիություն: Նոր ֆունկցիոնալություն ավելացնել ժառանգորդներում առանց հիմնական դասը փոխելու:
Ժառանգության թերություններ:
- Ապահով կապ: Փոփոխությունները հիմնական դասում կարող են ազդել ժառանգորդների վրա:
- Ռոմբի խնդիր (բազմաթիվ ժառանգության լեզուներում): Swift-ում դա բացակայում է միայնակ ժառանգության պատճառով:
- Համակցման բարդություն: Գլխավոր ժառանգություններն ու խոր հորիզոնականները կարող են դժվար լինել հասկանալու և պահպանելու համար:
Swift-ը նախընտրում է կոմպոզիցիան ժառանգության փոխարեն՝ ավելի ճկունություն և կոդի վերօգտագործում ապահովելու համար, հատկապես պրոտոկոլների և ընդլայնումների դեպքում: Այնուամենայնիվ, ժառանգությունը կարևոր գործիք է հորիզոնական կառուցվածքներ ստեղծելու և ՕՕՊ սկզբունքները իրականացնելիս: