- Published on
Swiftda metodlar va Propertylarni Override qilish
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Swift Inheritanceda subclass superclassning metodlari va propertylarini meros oladi. Bu subclasslarga superclass elementlariga to'g'ridan-to'g'ri murojaat qilish imkonini beradi.
Endi, agar bir xil metod ham superclassda, ham subclassda e'lon qilingan bo'lsa, subclassdagi metod superclassdagi metodning ustidan yoziladi. Bu overriding deyiladi.
Metod overriding e'lon qilish uchun override kalit so'zidan foydalanamiz. Masalan,
class Vehicle {
func displayInfo(){
...
}
}
class Car: Vehicle {
// metodning ustidan yozish
override func displayInfo() {
...
}
}
Bu yerda Car subclassining displayInfo() metodi Vehicle superclassining bir xil metodining ustidan yoziladi.
Misol:
class Vehicle {
// superclassdagi metod
func displayInfo() {
print("To'rt g'ildirakli yoki ikki g'ildirakli")
}
}
// Car classi Vehicle classidan meros oladi
class Car: Vehicle {
// displayInfo() metodining ustidan yozish
override func displayInfo() {
print("To'rt g'ildirakli")
}
}
// subclassdan obyekt yaratish
var car1 = Car()
// displayInfo() metodini chaqirish
car1.displayInfo()
Natija:
To'rt g'ildirakli
Yuqoridagi misolda Car subclassi ichida Vehicle superclassining displayInfo() metodining ustidan yozyapmiz.
// Car classi ichida
override func displayInfo() {
print("To'rt g'ildirakli")
}
Bu yerda ustidan yozilayotgan metodini bildirish uchun override kalit so'zidan foydalandik.
Endi Car klassining car1 obyekti yordamida displayInfo() metodini chaqirganimizda,
car1.displayInfo()
subclass ichidagi metod chaqiriladi.
Bu shunday ishlaydi, chunki Car subclassining displayInfo() metodi Vehicle superclassining bir xil metodining ustidan yoziladi.
Override qilingan metodga murojaat
Subclassdan superclassning metodiga murojaat qilish uchun super kalit so'zidan foydalanamiz. Masalan,
class Vehicle {
// superclassdagi metod
func displayInfo() {
print("Transport: To'rt g'ildirakli yoki ikki g'ildirakli")
}
}
// Car classi Vehicle classidan meros oladi
class Car: Vehicle {
// displayInfo() metodining ustidan yozish
override func displayInfo() {
// superclassning displayInfo() metodiga murojaat
super.displayInfo()
print("Mashina: To'rt g'ildirakli")
}
}
// subclassdan obyekt yaratish
var car1 = Car()
// displayInfo() metodini chaqirish
car1.displayInfo()
Natija:
Transport: To'rt g'ildirakli yoki ikki g'ildirakli
Mashina: To'rt g'ildirakli
Yuqoridagi misolda Car subclassining displayInfo() metodi Vehicle superclassining bir xil metodining ustidan yoziladi.
Car ning displayInfo() ichida
// superclass metodini chaqirish
super.displayInfo()
dan foydalanib, Vehicle ning displayInfo() metodini chaqirdik.
Shunday qilib, car1 obyekti yordamida displayInfo() metodini chaqirganimizda
// displayInfo() metodini chaqirish
car1.displayInfo()
ham override qilingan, ham superclass versiyasidagi displayInfo() metodlari bajariladi.Metodning Override qilinishini oldini olish
Swiftda metodning override qilinishini oldini olish mumkin.
Metodning override qilinmasligi uchun superclassda metod e'lon qilishda final kalit so'zidan foydalanamiz. Masalan,
class Vehicle {
// override qilishning oldini olish
final func displayInfo() {
print("To'rt g'ildirakli yoki ikki g'ildirakli")
}
}
// Car classi Vehicle classidan meros oladi
class Car: Vehicle {
// override qilishga urinish
override func displayInfo() {
print("To'rt g'ildirakli")
}
}
// subclassdan obyekt yaratish
var car1 = Car()
// displayInfo() metodini chaqirish
car1.displayInfo()
Yuqoridagi misolda superclassdagi displayInfo() metodini final deb belgiladik.
Metod final deb e'lon qilingandan so'ng, uni override qila olmaymiz. Shuning uchun final metodning ustidan yozishga uringanimizda,
override func displayInfo() {
print("To'rt g'ildirakli")
}
xato xabari olamiz: error: instance method overrides a 'final' instance method.
Propertylarini Override qilish
Swiftda computed propertylarning ustidan yozish mumkin. Masalan,
class University {
// computed property
var cost: Int {
return 5000
}
}
class Fee: University {
// computed propertyning ustidan yozish
override var cost: Int {
return 10000
}
}
var amount = Fee()
// cost propertyga murojaat
print("Yangi to'lov:", amount.cost)
Natija:
Yangi to'lov: 10000
Yuqoridagi misolda University superclassi ichida computed property yaratdik. Fee subclassi ichidagi kodga e'tibor bering:
override var cost: Int {
return 10000
}
Biz cost computed propertyning ustidan yozyapmiz. Endi Fee ning amount obyekti yordamida cost propertyga murojaat qilganimizda,
// cost propertyga murojaat
amount.cost
subclass ichidagi property chaqiriladi.
Swiftda stored propertylarning ustidan yozib bo'lmaydi. Masalan,
class A {
// stored property
var num = 0
}
class B: A {
// stored propertyning ustidan yozishga urinish
override var num = 2 // Xato kod
}