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 |