Sobes.tech
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 Μέσα στο αρχείο (σε ανώτατο επίπεδο); μέσα στην κλάση (για μέλη) Για απόκρυψη λεπτομερειών υλοποίησης εντός του αρχείου ή της κλάσης