Junior
Čo sú modifikátory viditeľnosti a ako ich používať v Kotlin?
sobes.tech AI
Odpoveď od AI
Modifikátory viditeľnosti v Kotlin určujú dostupnosť deklarácií (tried, rozhraní, funkcií, vlastností) pre ostatné časti programu.
Hlavné modifikátory viditeľnosti:
public: Viditeľný všade. Predvolený modifikátor.internal: Viditeľný iba v rámci jedného modulu. Modul je súbor Kotlinových súborov kompilovaných dohromady.protected: Viditeľný v rámci triedy a jej podtried (vrátane členov definovaných v dedičných triedach). Nie je viditeľný mimo balíka.private: Viditeľný iba v rámci súboru, v ktorom je deklarovaný. U členov triedy je viditeľný iba v rámci tejto triedy (vrátane jej companion object, vnorených a vnútorných tried).
Použitie modifikátorov:
- Pre triedy, rozhrania, objekty a ich konštruktory.
- Pre funkcie, vlastnosti a ich getterov/setterov na najvyššej úrovni (mimo tried).
- Pre členov triedy (vnorené triedy, vnútorné triedy, funkcie, vlastnosti).
Príklad:
// Súbor: example.kt
private const val PRIVATE_CONSTANT = 1 // Viditeľný iba v tomto súbore
internal fun internalFunction() { // Viditeľný iba v rámci modulu
println("Interná funkcia")
}
open class BaseClass {
protected val protectedProperty = "Chránené" // Viditeľné v tejto triede a jej podtriedach
fun publicMethod() { // Viditeľné všade (predvolené public)
println("Verejná funkcia")
}
private fun privateMethod() { // Viditeľné iba v rámci BaseClass
println("Súkromná funkcia")
}
}
class DerivedClass : BaseClass() {
fun accessProtected() {
println("Prístup k chránenému vlastnosti: $protectedProperty") // Prístup k protected
// privateMethod() // Chyba: private nie je viditeľné v podtriede
}
}
fun main() {
val base = BaseClass()
base.publicMethod()
// base.protectedProperty // Chyba: protected nie je viditeľné mimo triedy a jej podtried
val derived = DerivedClass()
derived.accessProtected()
internalFunction()
// PRIVATE_CONSTANT // Chyba: private na najvyššej úrovni je viditeľná iba v deklarovanom súbore
}
| Modifikátor | Dostupnosť | Kde použiť |
|---|---|---|
public |
Všade | Predvolené, keď nie je uvedený iný modifikátor |
internal |
Uvnitř modulu | Pre API v rámci knižnice alebo modulu |
protected |
Uvnitř triedy a jejích podtried (pre členov triedy) | Pre vytváranie hierarchií tried s dedičstvom |
private |
Uvnitř súboru (pre najvyššiu úroveň); uvnitř triedy (pre členov) | Pre skrytie detailov implementácie v rámci súboru alebo triedy |