Junior
Swift программалоо тилинде жөнөкөй класс менен open классинин айырмасы эмнеде?
sobes.tech AI
AIден жооп
Жөнөкөй класс (керүүчү модификатору жок) алдын ала (internal) кирүү деңгээлине ээ. Ал ошол эле модулдун (максаттын) ичинде гана мурас алууга болот.
open класс эң жогорку кирүү деңгээлине ээ жана анын мүчөлөрү (методдору, мүнөздөмөлөрү, субскрипттери) ошол эле модулда жана башка модулдарда (frameworkдер, китепканалар) мурас алынып жана кайра жазылышы мүмкүн.
| Модификатор | Модулдун ичинде мурас | Модулдун сыртына мурас | Модулдун ичинде мүчөлөрдү кайра жазуу | Модулдун сыртына мүчөлөрдү кайра жазуу |
|---|---|---|---|---|
internal (өзүнчө) |
Ооба | Жок | Ооба | Жок |
open |
Ооба | Ооба | Ооба | Ооба |
// Жөнөкөй класс мисалы (internal алдын ала) А модулунун ичинде
class MyInternalClass {
func internalMethod() {}
}
// `open` класс мисалы А модулунун ичинде
open class MyOpenClass {
open func openMethod() {}
}
// Иштөө А модулунун ичинде
class SubInternalClassInModuleA: MyInternalClass { // ОК
override func internalMethod() {} // ОК
}
class SubOpenClassInModuleA: MyOpenClass { // ОК
override func openMethod() {} // ОК
}
// А модулунан тышкары колдонуу (мисалы, B модулунда)
// ката: `open` эмес класс 'MyInternalClass'дан мурас алуу мүмкүн эмес
// class SubInternalClassInModuleB: MyInternalClass { }
class SubOpenClassInModuleB: MyOpenClass { // ОК
override func openMethod() {} // ОК
}