Sobes.tech
Junior

Jaka jest różnica między open a public?

sobes.tech AI

Odpowiedź od AI

open pozwala na dziedziczenie i nadpisywanie członków w dowolnym module, podczas gdy public pozwala na używanie członków w dowolnym module, ale dziedziczenie i nadpisywanie są dozwolone tylko w ramach tego samego modułu, w którym członek jest zadeklarowany.

Charakterystyka open public
Dostęp Dowolny moduł Dowolny moduł
Dziedziczenie Dowolny moduł Tylko w swoim module
Nadpisywanie Dowolny moduł Tylko w swoim module

Przykład:

// Moduł A
open class OpenClass {
    open func openMethod() { }
    public func publicMethod() { }
}

public class PublicClass {
    public func publicMethod() { }
}

// Moduł B
import ModuleA

class SubclassOfOpen: OpenClass {
    override func openMethod() {
        // Możliwe w Module B
    }

    // Błąd: publicMethod jest dozwolone do użycia, ale nie do nadpisania poza Module A
    // override func publicMethod() { }
}

// Błąd: PublicClass nie pozwala na dziedziczenie poza Module A
// class SubclassOfPublic: PublicClass { }