Sobes.tech
Junior

Ist die Klasse open öffentlich oder privat?

sobes.tech KI

Antwort von AI

Die Klasse open ist öffentlich. Der Unterschied zu einfach public besteht darin, dass Klassen und Klassenmitglieder, die als open deklariert sind, außerhalb des Moduls, in dem sie definiert sind, vererbt und überschrieben werden können. public Klassen sind für die Verwendung außerhalb des Moduls zugänglich, können aber nicht vererbt oder überschrieben werden, es sei denn, sie sind als open gekennzeichnet.

Zugriffslevels in Swift:

  • open: Das höchste Zugriffslevel. Es ist aus jedem Modul zugänglich und kann vererbt und überschrieben werden.
  • public: Es ist aus jedem Modul zugänglich, kann aber außerhalb des Moduls nicht vererbt oder überschrieben werden.
  • internal: Standard-Zugriffslevel. Es ist nur innerhalb eines Moduls zugänglich.
  • fileprivate: Es ist nur innerhalb der Datei zugänglich, in der es definiert ist.
  • private: Das niedrigste Zugriffslevel. Es ist nur innerhalb der Deklaration zugänglich, in der es definiert ist.

Beispiel:

// Deklaration einer open-Klasse in ModulesA.swift
open class OpenClass {
    open func openMethod() {
        print("Dies ist eine open-Methode.")
    }
}

// Verwendung in ModulesB.swift (anderes Modul)
import ModulesA

class MyClass: OpenClass { // Vererbung ist erlaubt
    override func openMethod() { // Überschreiben ist erlaubt
        super.openMethod()
        print("Dies ist eine überschreibende open-Methode.")
    }
}
// Deklaration einer public-Klasse in ModulesA.swift
public class PublicClass {
    public func publicMethod() {
        print("Dies ist eine öffentliche Methode.")
    }
}

// Verwendung in ModulesB.swift (anderes Modul)
import ModulesA

let instance = PublicClass()
instance.publicMethod() // Verwendung ist erlaubt

// class MyOtherClass: PublicClass { // FEHLER: Öffentliche Klasse kann außerhalb ihres Moduls nicht unterklassen werden
//     override func publicMethod() { // FEHLER: Öffentliche Methode kann außerhalb ihres Moduls nicht überschrieben werden
//         super.publicMethod()
//     }
// }