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