Junior
Vai klase open ir publiska vai privāta?
sobes.tech AI
Atbilde no AI
open klase ir ir tās locekļi ir publiski. Atšķirība no vienkāršās public ir tā, ka open klases un locekļi, kas ir paziņoti kā open, var tikt mantoți un pārdefinēti ārpus moduļa, kurā tie ir definēti. public klases ir pieejamas izmantošanai ārpus moduļa, bet tās nevar tikt mantotas vai pārdefinētas, ja tās nav paziņotas kā open.
Swift piekļuves līmeņi:
open: augstākais piekļuves līmenis. Pieejams no jebkura moduļa un var tikt mantoīts un pārdefinēts.public: pieejams no jebkura moduļa, bet ārpus tā nevar tikt mantoīts vai pārdefinēts.internal: noklusējuma piekļuves līmenis. Pieejams tikai moduļa ietvaros.fileprivate: pieejams tikai tajā failā, kurā tas ir definēts.private: zemākais piekļuves līmenis. Pieejams tikai tajā deklarācijā, kurā tas ir definēts.
Piemērs:
// `open` klases deklarācija ModulesA.swift failā
open class OpenClass {
open func openMethod() {
print("Šis ir atvērts metodes.")
}
}
// Lietošana ModulesB.swift failā (cita modulī)
import ModulesA
class MyClass: OpenClass { // Mantošana ir atļauta
override func openMethod() { // Pārdefinēšana ir atļauta
super.openMethod()
print("Šis ir pārdefinēts atvērts metodes.")
}
}
// `public` klases deklarācija ModulesA.swift failā
public class PublicClass {
public func publicMethod() {
print("Šis ir publiskais metodes.")
}
}
// Lietošana ModulesB.swift failā (cita modulī)
import ModulesA
let instance = PublicClass()
instance.publicMethod() // Lietošana ir atļauta
// class MyOtherClass: PublicClass { // KĻŪDA: publiska klase nevar tikt mantoīta ārpus moduļa
// override func publicMethod() { // KĻŪDA: publiskais metodes nevar tikt pārdefinēts ārpus moduļa
// super.publicMethod()
// }
// }