Junior
Swift პროგრამირების ენაში უბრალო კლასი და open კლასი შორის რა განსხვავებაა?
sobes.tech AI
პასუხი AI-სგან
სადაც მარტივი კლასი (მომწოდებელი მოდიფიკატორი არ არის) აქვს ინტერნალური (internal) წვდომის დონე. მას შეუძლია მემკვიდრეობა მხოლოდ იმავე მოდულში (მიზანში).
open კლასი აქვს ყველაზე მაღალი წვდომის დონე და მისი წევრები (მეთოდები, თვისებები, სუბსკრიპტები) შეიძლება იყოს გადაფარებული როგორც იმავე მოდულში, ასევე სხვა მოდულებში (ფრენერვორკები, ბიბლიოთეკები).
| მოდიფიკატორი | მემკვიდრეობა მოდულში | მემკვიდრეობა მოდულს გარეთ | წევრების გადაფარვა მოდულში | წევრების გადაფარვა მოდულს გარეთ |
|---|---|---|---|---|
internal (ნაგულისხმევი) |
დიახ | არა | დიახ | არა |
open |
დიახ | დიახ | დიახ | დიახ |
// მარტივი კლასის მაგალითი (internal ნაგულისხმევი) მოდული A შიგნით
class MyInternalClass {
func internalMethod() {}
}
// `open` კლასის მაგალითი მოდული A შიგნით
open class MyOpenClass {
open func openMethod() {}
}
// გამოყენება მოდული A შიგნით
class SubInternalClassInModuleA: MyInternalClass { // OK
override func internalMethod() {} // OK
}
class SubOpenClassInModuleA: MyOpenClass { // OK
override func openMethod() {} // OK
}
// გამოყენება მოდული A-ს გარეთ (მაგ., B მოდულში)
// შეცდომა: შეუძლებელია მემკვიდრეობა non-open კლასიდან 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }
class SubOpenClassInModuleB: MyOpenClass { // OK
override func openMethod() {} // OK
}