Sobes.tech
Junior

Ποια είναι η διαφορά μεταξύ μιας απλής κλάσης και μιας open κλάσης στη γλώσσα προγραμματισμού Swift;

sobes.tech AI

Απάντηση από AI

Μια απλή κλάση (χωρίς τροποποιητή πρόσβασης) έχει προεπιλεγμένο εσωτερικό (internal) επίπεδο πρόσβασης. Μπορεί να κληρονομηθεί μόνο εντός του ίδιου module (στόχου).

Η κλάση open έχει το υψηλότερο επίπεδο πρόσβασης και τα μέλη της (μέθοδοι, ιδιότητες, υποσcript) μπορούν να υπερισχύσουν τόσο εντός του ίδιου module όσο και σε άλλα modules (frameworks, βιβλιοθήκες).

Τροποποιητής Κληρονομικότητα εντός του module Κληρονομικότητα εκτός του module Υπερισχύσεις μελών εντός του module Υπερισχύσεις μελών εκτός του module
internal (προεπιλογή) Ναι Όχι Ναι Όχι
open Ναι Ναι Ναι Ναι
// Παράδειγμα απλής κλάσης (internal προεπιλογή) ΜΕΣΑ στο module A
class MyInternalClass {
    func internalMethod() {}
}

// Παράδειγμα open κλάσης ΜΕΣΑ στο module A
open class MyOpenClass {
    open func openMethod() {}
}
// Χρήση ΜΕΣΑ στο module A
class SubInternalClassInModuleA: MyInternalClass { // OK
    override func internalMethod() {}  // OK
}

class SubOpenClassInModuleA: MyOpenClass { // OK
    override func openMethod() {} // OK
}
// Χρήση ΕΚΤΟΣ του module A (π.χ., στο module B)
// σφάλμα: δεν μπορεί να κληρονομήσει από μη-open κλάση 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }

class SubOpenClassInModuleB: MyOpenClass { // OK
    override func openMethod() {} // OK
}