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
}