Sobes.tech
Junior

дар бораи занҷири меросии синфҳо дар забони Swift гап занед.

sobes.tech AI

Ҷавоб аз AI

Дар Swift ҳама синфҳо ба таври ғайрирасмӣ аз синфи асосии NSObject мерос мегиранд, ҳатто агар ин ба таври равшан нишон дода нашуда бошад. Ин Swift-ро аз баъзе забонҳои дигар, ки метавонад чандин синфи реша дошта бошанд, фарқ мекунад.

Занҷири мероссозӣ як ҳиерархияро намоиш медиҳад, ки дар он ҳар як синф хусусиятҳо ва усулҳоро аз синфи падар (суперкласс) мерос мегирад. Синф метавонад танҳо як суперкласс дошта бошад.

Масалан:

// Синфи асосӣ (ба таври ғайрирасмӣ аз NSObject мерос мегирад)
class Animal {
    var name: String

    init(name: String) {
        self.name = name
    }

    func makeSound() {
        print("Садо ношинос")
    }
}

// Синфи Dog аз Animal мерос мегирад
class Dog: Animal {
    let breed: String

    init(name: String, breed: String) {
        self.breed = breed
        super.init(name: name) // Иҷрои инициализатори суперкласс
    }

    override func makeSound() { // Баргардонидани усули суперкласс
        print("Гав-гав")
    }
}

// Синфи Poodle аз Dog мерос мегирад
class Poodle: Dog {
    var isHypoallergenic: Bool

    init(name: String, breed: String, isHypoallergenic: Bool) {
        self.isHypoallergenic = isHypoallergenic
        super.init(name: name, breed: breed) // Иҷрои инициализатори суперкласс
    }

    // Poodle усули makeSound-ро баргардон намекунад, аз Dog мерос мегирад
}

let myDog = Dog(name: "Buddy", breed: "Labrador")
myDog.makeSound() // Натиҷа: Гав-гав

let myPoodle = Poodle(name: "Lucy", breed: "Miniature Poodle", isHypoallergenic: true)
myPoodle.makeSound() // Натиҷа: Гав-гав - мерос мегирад аз Dog

Мавзӯъҳои асосӣ:

  • Мерос: Класси B: A маънои онро дорад, ки класс B аз класс A мерос мегирад.
  • Суперкласс: Класс, ки аз он мерос мегирад. Дар мисол Animal суперкласс барои Dog аст, ва Dog суперкласс барои Poodle.
  • Подкласс: Класс, ки аз дигар класс мерос мегирад. Дар мисол Dog подкласс барои Animal аст, ва Poodle подкласс барои Dog.
  • super: Барои дастрасӣ ба иҷрои усулҳо ё инициализаторҳои суперкласс истифода мешавад.
  • override: Калидвожа, ки барои баргардон кардани усулҳо ё хосиятҳои суперкласс дар подклассҳо истифода мешавад.
  • final: Модификатор, ки метавонад ба класс, усул ё хосият татбиқ карда шавад, то аз баргардон ё мерос гирифтан манъ кунад.

Таблицаи нишондиҳанда, ки занҷираи мероссозиро дар мисол нишон медиҳад:

Класс Мерос мегирад аз makeSound-ро баргардон мекунад?
NSObject - Не
Animal NSObject Не
Dog Animal Бале
Poodle Dog Не

Занҷираи мероссозӣ имкон медиҳад, ки код такрор ба такрор истифода шавад, версияҳои махсуси синфҳоро эҷод кунад ва сохтори маълумотро дар шакли ҳиерархӣ ташкил диҳад.