Sobes.tech
Junior

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

sobes.tech AI

Odpowiedź od AI

W Swift domyślnie wszystkie klasy są oznaczone jako final — nie można ich dziedziczyć. Aby klasa mogła być dziedziczona, musi być zadeklarowana jako open lub public, ale między nimi istnieją ważne różnice:

  • open — najbardziej otwarty poziom dostępu. Klasa z modyfikatorem open może być dziedziczona i jej metody mogą być nadpisywane zarówno wewnątrz, jak i na zewnątrz modułu.
  • public — klasa jest dostępna do użycia poza modułem, ale dziedziczenie i nadpisywanie metod jest możliwe tylko w tym samym module.

W związku z tym, klasa open pozwala na rozszerzanie i modyfikowanie zachowania w innych modułach, a zwykła (np. public) — nie.

Przykład:

open class OpenClass {
    open func greet() {
        print("Hello from OpenClass")
    }
}

public class PublicClass {
    public func greet() {
        print("Hello from PublicClass")
    }
}

// W innym module można dziedziczyć po OpenClass i nadpisywać greet(),
// ale nie po PublicClass.