Junior
Ar atvira klasė yra vieša ar privači?
sobes.tech AI
Atsakymas iš AI
open klasė yra vieša. Skirtumas nuo paprastos public yra tas, kad open klasės ir jos nariai, paskelbti kaip open, gali būti paveldėti ir perrašyti už modulio ribų, kuriame jie apibrėžti. public klasės yra prieinamos naudoti už modulio ribų, tačiau negali būti paveldėtos ar perrašytos, jei nėra pažymėtos kaip open.
Swift prieigos lygiai:
open: aukščiausias prieigos lygis. Prieinamas iš bet kurio modulio ir gali būti paveldėtas bei perrašytas.public: prieinamas iš bet kurio modulio, bet už modulio ribų negali būti paveldėtas ar perrašytas.internal: numatytasis prieigos lygis. Prieinamas tik modulio ribose.fileprivate: prieinamas tik faile, kuriame apibrėžtas.private: žemiausias prieigos lygis. Prieinamas tik toje deklaracijoje, kurioje yra apibrėžtas.
Pavyzdys:
// `open` klasės deklaravimas ModulesA.swift faile
open class OpenClass {
open func openMethod() {
print("Tai yra atviras metodas.")
}
}
// Naudojimas ModulesB.swift faile (kitoje modulyje)
import ModulesA
class MyClass: OpenClass { // Paveldėjimas leidžiamas
override func openMethod() { // Perrašymas leidžiamas
super.openMethod()
print("Tai yra perrašytas atviras metodas.")
}
}
// `public` klasės deklaravimas ModulesA.swift faile
public class PublicClass {
public func publicMethod() {
print("Tai yra viešas metodas.")
}
}
// Naudojimas ModulesB.swift faile (kitoje modulyje)
import ModulesA
let instance = PublicClass()
instance.publicMethod() // Naudojimas leidžiamas
// class MyOtherClass: PublicClass { // KLAIDA: viešas klasė negali būti paveldėta už modulio ribų
// override func publicMethod() { // KLAIDA: viešas metodas negali būti perrašytas už modulio ribų
// super.publicMethod()
// }
// }