Sobes.tech
Junior

Jaký je rozdíl mezi open a public?

sobes.tech AI

Odpověď od AI

open umožňuje dědit a přepisovat členy v jakémkoli modulu, zatímco public umožňuje používat členy v jakémkoli modulu, ale dědění a přepisování jsou povoleny pouze v rámci stejného modulu, ve kterém je člen deklarován.

Charakteristika open public
Přístup Jakýkoli modul Jakýkoli modul
Dědění Jakýkoli modul Pouze ve vlastním modulu
Přepisování Jakýkoli modul Pouze ve vlastním modulu

Příklad:

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

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

// Modul B
import ModuleA

class SubclassOfOpen: OpenClass {
    override func openMethod() {
        // Možné v modulu B
    }

    // Chyba: publicMethod je povoleno používat, ale nelze přepsat mimo modul A
    // override func publicMethod() { }
}

// Chyba: PublicClass neumožňuje dědit mimo modul A
// class SubclassOfPublic: PublicClass { }