Sobes.tech
Junior

Je trieda open verejná alebo súkromná?

sobes.tech AI

Odpoveď od AI

Trieda open je verejná. Rozdiel od jednoduchej public je v tom, že triedy a členovia tried deklarovaní ako open môžu byť dediť a prepísaní mimo modulu, v ktorom sú definované. public triedy sú dostupné na použitie mimo modulu, ale nemôžu byť dediť alebo prepísané, pokiaľ nie sú označené ako open.

Úrovne prístupu v Swift:

  • open: Najvyššia úroveň prístupu. Dostupná z akéhokoľvek modulu a môže byť dediť a prepísaná.
  • public: Dostupná z akéhokoľvek modulu, ale nemôže byť dediť alebo prepísaná mimo modulu.
  • internal: Predvolená úroveň prístupu. Dostupná iba v rámci jedného modulu.
  • fileprivate: Dostupná iba v rámci súboru, v ktorom je definovaná.
  • private: Najnižšia úroveň prístupu. Dostupná iba v rámci deklarácie, v ktorej je definovaná.

Príklad:

// Vyhlásenie `open` triedy v ModulesA.swift
open class OpenClass {
    open func openMethod() {
        print("Toto je open metóda.")
    }
}

// Použitie v ModulesB.swift (iný modul)
import ModulesA

class MyClass: OpenClass { // Dediť je povolené
    override func openMethod() { // Prepisovanie je povolené
        super.openMethod()
        print("Toto je prepísaná open metóda.")
    }
}
// Vyhlásenie verejnej triedy v ModulesA.swift
public class PublicClass {
    public func publicMethod() {
        print("Toto je verejná metóda.")
    }
}

// Použitie v ModulesB.swift (iný modul)
import ModulesA

let instance = PublicClass()
instance.publicMethod() // Použitie je povolené

// class MyOtherClass: PublicClass { // CHYBA: Verejná trieda nemôže byť podtriedou mimo jej modulu
//     override func publicMethod() { // CHYBA: Verejná metóda nemôže byť prepísaná mimo jej modulu
//         super.publicMethod()
//     }
// }