Junior
Окласс open омуҳим аст ё хусусӣ?
sobes.tech AI
Ҷавоб аз AI
Класи open умумӣ мебошад. Фарқ аз public оддӣ дар он аст, ки класи ва аъзои класи, ки ҳамчун open эълон шудаанд, метавонанд дар берун аз модули, ки онҳо дар он муайян шудаанд, мерос гирифта ва такмил дода шаванд. Классҳои public барои истифода дар берун аз модул дастрасанд, аммо онҳо наметавонанд мерос гирифта ё такмил дода шаванд, агар онҳо ҳамчун open нишон дода нашаванд.
Дараҷаҳои дастрасӣ дар Swift:
open: Баландтарин дараҷаи дастрасӣ. Аз ҳар як модул дастрас аст ва метавонад мерос гирифта ва такмил дода шавад.public: Аз ҳар як модул дастрас аст, аммо дар берун аз модул наметавонад мерос гирифта ё такмил дода шавад.internal: Дараҷаи пешфарзии дастрасӣ. Танҳо дар дохили як модул дастрас аст.fileprivate: Танҳо дар дохили файле, ки он муайян шудааст, дастрас аст.private: Баландтарин дараҷаи дастрасӣ. Танҳо дар дохили эълон, ки он муайян шудааст, дастрас аст.
Масалан:
// Эълон кардани класи `open` дар ModulesA.swift
open class OpenClass {
open func openMethod() {
print("Ин як методи open мебошад.")
}
}
// Истифода дар ModulesB.swift (модул дигар)
import ModulesA
class MyClass: OpenClass { // Наслед кардан иҷозат дода шудааст
override func openMethod() { // Такмил додан иҷозат дода шудааст
super.openMethod()
print("Ин як методи open такмилшуда мебошад.")
}
}
// Эълон кардани класи public дар ModulesA.swift
public class PublicClass {
public func publicMethod() {
print("Ин як методи умумӣ мебошад.")
}
}
// Истифода дар ModulesB.swift (модул дигар)
import ModulesA
let instance = PublicClass()
instance.publicMethod() // Истифода иҷозат дода шудааст
// class MyOtherClass: PublicClass { // ХАТО: Класси умумӣ дар берун аз модулаш наметавонад подкласи шавад
// override func publicMethod() { // ХАТО: Методии умумӣ дар берун аз модулаш наметавонад такмил дода шавад
// super.publicMethod()
// }
// }