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
}