Published on

Swiftda metodlar va Propertylarni Override qilish

Authors

Bilimingizni sinab ko'ring!

20 ta savol Β· ~20 daqiqa

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:

Swift
Method Overriding
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()

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,

Swift
super Kalit So'zi
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()

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()
array 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,

Swift
Property Overriding
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)

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
}
Buy mea coffee