Junior
Τι είναι οι τροποποιητές ορατότητας και πώς τους χρησιμοποιούμε στο Kotlin;
sobes.tech AI
Απάντηση από AI
Οι τροποποιητές ορατότητας στο Kotlin καθορίζουν την πρόσβαση στις δηλώσεις (κλάσεις, διεπαφές, συναρτήσεις, ιδιότητες) από άλλα μέρη του προγράμματος.
Οι κύριοι τροποποιητές ορατότητας:
public: Ορατό παντού. Είναι ο προεπιλεγμένος τροποποιητής.internal: Ορατό μόνο εντός ενός module. Ένα module θεωρείται ένα σύνολο αρχείων Kotlin που μεταγλωττίζονται μαζί.protected: Ορατό εντός της κλάσης και των υποκλάσεών της (συμπεριλαμβανομένων των μελών που ορίζονται σε υποκλάσεις). Δεν είναι ορατό εκτός του πακέτου.private: Ορατό μόνο εντός του αρχείου στο οποίο δηλώνεται. Για τα μέλη της κλάσης, μόνο εντός αυτής (και του αντικειμένου συνοδού, των εσωτερικών και εσωτερικών κλάσεων).
Εφαρμογή των τροποποιητών:
- Σε κλάσεις, διεπαφές, αντικείμενα και τους κατασκευαστές τους.
- Σε συναρτήσεις, ιδιότητες και τους getters/setters τους σε ανώτατο επίπεδο (εκτός κλάσεων).
- Σε μέλη κλάσεων (εσωτερικές κλάσεις, εσωτερικές, συναρτήσεις, ιδιότητες).
Παράδειγμα:
// Αρχείο: example.kt
private const val PRIVATE_CONSTANT = 1 // Ορατό μόνο σε αυτό το αρχείο
internal fun internalFunction() { // Ορατό μόνο εντός του module
println("Κλήση εσωτερικής συνάρτησης")
}
open class BaseClass {
protected val protectedProperty = "Protected" // Ορατό σε αυτήν την κλάση και τις υποκλάσεις της
fun publicMethod() { // Ορατό παντού (προεπιλεγμένο public)
println("Κλήση δημόσιας μεθόδου")
}
private fun privateMethod() { // Ορατό μόνο εντός της BaseClass
println("Κλήση ιδιωτικής μεθόδου")
}
}
class DerivedClass : BaseClass() {
fun accessProtected() {
println("Πρόσβαση σε προστατευμένη ιδιότητα: $protectedProperty") // Πρόσβαση σε protected
// privateMethod() // Σφάλμα: private δεν ορατό στην υποκλάση
}
}
fun main() {
val base = BaseClass()
base.publicMethod()
// base.protectedProperty // Σφάλμα: protected δεν ορατό εκτός της κλάσης και των υποκλάσεών της
val derived = DerivedClass()
derived.accessProtected()
internalFunction()
// PRIVATE_CONSTANT // Σφάλμα: private σε ανώτατο επίπεδο ορατό μόνο στο αρχείο δήλωσης
}
| Τροποποιητής | Πρόσβαση | Πού να χρησιμοποιήσετε |
|---|---|---|
public |
Παντού | Προεπιλογή, όταν δεν καθορίζεται άλλος τροποποιητής |
internal |
Μέσα στο module | Για API εντός βιβλιοθήκης ή module |
protected |
Μέσα στην κλάση και τις υποκλάσεις της (για μέλη) | Για δημιουργία ιεραρχιών κλάσεων με κληρονομικότητα |
private |
Μέσα στο αρχείο (σε ανώτατο επίπεδο); μέσα στην κλάση (για μέλη) | Για απόκρυψη λεπτομερειών υλοποίησης εντός του αρχείου ή της κλάσης |