Sobes.tech
Junior

Nyilvános vagy privát az open osztály?

sobes.tech MI

Válasz az MI-től

Az open osztály nyilvános. A különbség a sima public-hoz képest az, hogy az open-ként deklarált osztályok és osztálytagok örökölhetők és felülírhatók azon túl, ahol definiálták őket. A public osztályok elérhetők a modulon kívül, de nem örökölhetők vagy írhatók felül, kivéve, ha open-ként vannak megjelölve.

Swiftben az elérési szintek:

  • open: A legmagasabb elérési szint. Bármely modulból elérhető, örökölhető és felülírható.
  • public: Bármely modulból elérhető, de nem örökölhető vagy felülírható a modulon kívül.
  • internal: Alapértelmezett elérési szint. Csak egy modulon belül elérhető.
  • fileprivate: Csak az adott fájlon belül elérhető.
  • private: A legalacsonyabb elérési szint. Csak az adott deklarációban elérhető, ahol definiálták.

Példa:

// `open` osztály deklarálása ModulesA.swift-ben
open class OpenClass {
    open func openMethod() {
        print("Ez egy open metódus.")
    }
}

// Használat a ModulesB.swift-ben (más modul)
import ModulesA

class MyClass: OpenClass { // Öröklés engedélyezett
    override func openMethod() { // Felülírás engedélyezett
        super.openMethod()
        print("Ez egy felülírt open metódus.")
    }
}
// `public` osztály deklarálása ModulesA.swift-ben
public class PublicClass {
    public func publicMethod() {
        print("Ez egy nyilvános metódus.")
    }
}

// Használat a ModulesB.swift-ben (más modul)
import ModulesA

let instance = PublicClass()
instance.publicMethod() // Használat engedélyezett

// class MyOtherClass: PublicClass { // HIBA: A nyilvános osztályt nem lehet alosztályozni a modulján kívül
//     override func publicMethod() { // HIBA: A nyilvános metódus nem írható felül a modulján kívül
//         super.publicMethod()
//     }
// }