Sobes.tech
Junior

Jaka jest różnica między prostą klasą a klasą open w języku Swift?

sobes.tech AI

Odpowiedź od AI

Prosta klasa (bez modyfikatora dostępu) ma domyślny poziom dostępu wewnętrznego (internal). Może być dziedziczona tylko w obrębie tego samego modułu (celu).

Klasa open ma najwyższy poziom dostępu i jej członkowie (metody, właściwości, subskrypty) mogą być nadpisywani zarówno w obrębie tego samego modułu, jak i w innych modułach (frameworkach, bibliotekach).

Modyfikator Dziedziczenie w obrębie modułu Dziedziczenie poza modułem Nadpisywanie członków w obrębie modułu Nadpisywanie członków poza modułem
internal (domyślnie) Tak Nie Tak Nie
open Tak Tak Tak Tak
// Przykład prostej klasy (domyślnie internal) WŚRÓD modułu A
class MyInternalClass {
    func internalMethod() {}
}

// Przykład klasy open WŚRÓD modułu A
open class MyOpenClass {
    open func openMethod() {}
}
// Użycie WŚRÓD modułu A
class SubInternalClassInModuleA: MyInternalClass { // OK
    override func internalMethod() {}  // OK
}

class SubOpenClassInModuleA: MyOpenClass { // OK
    override func openMethod() {} // OK
}
// Użycie POZA modułem A (np. w module B)
// błąd: nie można dziedziczyć po klasie nie-open 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }

class SubOpenClassInModuleB: MyOpenClass { // OK
    override func openMethod() {} // OK
}