Sobes.tech
Junior

Šta su modifikatori vidljivosti i kako ih koristiti u Kotlinu?

sobes.tech АИ

Одговор од АИ

Модификatori vidljivosti u Kotlinu određuju dostupnost deklaracija (klasa, interfejsa, funkcija, svojstava) za ostale delove programa.

Glavni modifikatori vidljivosti:

  • public: Vidljiv svuda. Podrazumevani modifikator.
  • internal: Vidljiv samo unutar jednog modula. Modul se smatra skupom Kotlin fajlova koji se kompajliraju zajedno.
  • protected: Vidljiv unutar klase i njenih podklasa (uključujući članove definisane u naslednim klasama). Nije vidljiv izvan paketa.
  • private: Vidljiv samo unutar fajla u kojem je deklarisan. Za članove klase, vidljiv je samo unutar te klase (uključujući njen companion object, ugnježdene i unutrašnje klase).

Upotreba modifikatora:

  • Za klase, interfejse, objekte i njihove konstruktore.
  • Za funkcije, svojstva i njihove gettere/settere na najvišoj ravni (izvan klasa).
  • Za članove klase (ugnježdene klase, unutrašnje klase, funkcije, svojstva).

Primer:

// Fajl: example.kt

private const val PRIVATE_CONSTANT = 1 // Vidljivo samo u ovom fajlu

internal fun internalFunction() { // Vidljivo samo unutar modula
    println("Interna funkcija")
}

open class BaseClass {
    protected val protectedProperty = "Zaštitni" // Vidljivo u ovoj klasi i njenim podklasama

    fun publicMethod() { // Vidljivo svuda (podrazumevano public)
        println("Javna funkcija")
    }

    private fun privateMethod() { // Vidljivo samo unutar BaseClass
        println("Privatna funkcija")
    }
}

class DerivedClass : BaseClass() {
    fun accessProtected() {
        println("Pristup zaštićenoj svojstvu: $protectedProperty") // Pristup protected
        // privateMethod() // Greška: private nije vidljivo u podklasi
    }
}

fun main() {
    val base = BaseClass()
    base.publicMethod()
    // base.protectedProperty // Greška: protected nije vidljivo izvan klase i njenih podklasa

    val derived = DerivedClass()
    derived.accessProtected()

    internalFunction()
    // PRIVATE_CONSTANT // Greška: private na najvišoj ravni je vidljivo samo u deklarisanom fajlu
}
Modifikator Dostupnost Gde koristiti
public Svuda Podrazumevano, kada ne navedete drugi modifikator
internal Unutar modula Za API unutar biblioteke ili modula
protected Unutar klase i njenih podklasa (za članove klase) Za kreiranje hijerarhije klasa sa nasleđivanjem
private Unutar fajla (za najviši nivo); unutar klase (za članove) Za skrivanje detalja implementacije unutar fajla ili klase