Sobes.tech
Junior

Kas yra matomumo modifikatoriai ir kaip juos naudoti Kotlin?

sobes.tech AI

Atsakymas iš AI

Kotlin mato matomumo modifikatoriai nustato prieinamumą deklaracijoms (klasėms, interfeisams, funkcijoms, savybėms) kitiems programos dalims.

Pagrindiniai matomumo modifikatoriai:

  • public: matomas visur. Numatytoji reikšmė.
  • internal: matomas tik viename modulyje. Modulis laikomas Kotlin failų rinkiniu, kurie yra kompiliuojami kartu.
  • protected: matomas klasės ir jos paveldėtojų (įskaitant narius, apibrėžtus paveldėtojų klasėse) viduje. Iš išorės iš paketo nematomas.
  • private: matomas tik to failo viduje, kuriame jis deklaruotas. Klasės nariai matomi tik šioje klasėje (įskaitant jos companion object, įterptus ir vidinius klases).

Modifikatorių naudojimas:

  • Klasei, interfeisui, objektui ir jų konstruktoriams.
  • Funkcijoms, savybėms ir jų getteriams/setteriui aukštesniame lygyje (už klasių ribų).
  • Klasės nariams (įterptos klasės, vidinės klasės, funkcijos, savybės).

Pavyzdys:

// Failas: example.kt

private const val PRIVATE_CONSTANT = 1 // Matomas tik šiame faile

internal fun internalFunction() { // Matomas tik modulyje
    println("Vidinė funkcija")
}

open class BaseClass {
    protected val protectedProperty = "Apsaugota" // Matoma šiame klase ir jos paveldėtojose

    fun publicMethod() { // Matomas visur (numatyta public)
        println("Viešas metodas")
    }

    private fun privateMethod() { // Matomas tik šioje klasėje
        println("Privatus metodas")
    }
}

class DerivedClass : BaseClass() {
    fun accessProtected() {
        println("Prieiga prie apsaugotos savybės: $protectedProperty") // Prieiga prie protected
        // privateMethod() // Klaida: private nėra matomas paveldėtojoje klasėje
    }
}

fun main() {
    val base = BaseClass()
    base.publicMethod()
    // base.protectedProperty // Klaida: protected nėra matomas už klasės ir paveldėtojų ribų

    val derived = DerivedClass()
    derived.accessProtected()

    internalFunction()
    // PRIVATE_CONSTANT // Klaida: private aukštesniame lygyje matomas tik deklaracijos faile
}
Modifikatorius Prieinamumas Kur naudoti
public Visur Numatyta, kai nenurodytas kitas modifikatorius
internal Modulio viduje API bibliotekos ar modulio viduje
protected Klasės ir jos paveldėtojų viduje (nariams) Klasės hierarchijų kūrimui ir paveldėjimui
private Failo viduje (aukščiausio lygio); klasės viduje (nariams) Detalių slėpimui failo ar klasės viduje