Sobes.tech
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()
//     }
// }