Sobes.tech
Junior

Ce sunt modificatorii de vizibilitate și cum să îi folosiți în Kotlin?

sobes.tech AI

Răspuns de la AI

Modificatorii de vizibilitate în Kotlin determină accesibilitatea declarațiilor (clase, interfețe, funcții, proprietăți) pentru alte părți ale programului.

Principalii modificatori de vizibilitate:

  • public: Vizibil peste tot. Este modificatorul implicit.
  • internal: Vizibil doar în interiorul unui modul. Un modul este considerat un ansamblu de fișiere Kotlin compilate împreună.
  • protected: Vizibil în interiorul clasei și al subclasei sale (inclusiv membrii definiți în clasele moștenitoare). Nu este vizibil în afara pachetului.
  • private: Vizibil doar în interiorul fișierului în care este declarat. Pentru membrii clasei, doar în interiorul acesteia (și al obiectului său companion, claselor în interior și interne).

Aplicarea modificatorilor:

  • La clase, interfețe, obiecte și constructorii lor.
  • La funcții, proprietăți și getter/setter-urile lor la nivel superior (în afara claselor).
  • La membrii clasei (clase în interior, clase interne, funcții, proprietăți).

Exemplu:

// Fișier: example.kt

private const val PRIVATE_CONSTANT = 1 // Vizibil doar în acest fișier

internal fun internalFunction() { // Vizibil doar în interiorul modulului
    println("Funcție internă apelată")
}

open class BaseClass {
    protected val protectedProperty = "Protected" // Vizibil în această clasă și în subclasele sale

    fun publicMethod() { // Vizibil peste tot (public implicit)
        println("Metodă publică apelată")
    }

    private fun privateMethod() { // Vizibil doar în interiorul clasei BaseClass
        println("Metodă privată apelată")
    }
}

class DerivedClass : BaseClass() {
    fun accessProtected() {
        println("Acces la proprietatea protejată: $protectedProperty") // Acces la protected
        // privateMethod() // Eroare: private nu este vizibil în subclasă
    }
}

fun main() {
    val base = BaseClass()
    base.publicMethod()
    // base.protectedProperty // Eroare: protected nu este vizibil în afara clasei și subclasei

    val derived = DerivedClass()
    derived.accessProtected()

    internalFunction()
    // PRIVATE_CONSTANT // Eroare: private la nivel superior vizibil doar în fișierul de declarație
}
Modificator Accesibilitate Unde să folosiți
public Oriunde Implicit, când nu se specifică alt modificator
internal În interiorul modulului Pentru API în cadrul bibliotecii sau modulului
protected În interiorul clasei și al subclasei (pentru membri) Pentru crearea ierarhiilor de clase cu moștenire
private În interiorul fișierului (la nivel superior); în interiorul clasei (pentru membri) Pentru ascunderea detaliilor de implementare în interiorul fișierului sau clasei