Junior
Co jsou modifikátory viditelnosti a jak je používat v Kotlinu?
sobes.tech AI
Odpověď od AI
Modifikátory viditelnosti v Kotlinu určují dostupnost deklarací (tříd, rozhraní, funkcí, vlastností) pro ostatní části programu.
Hlavní modifikátory viditelnosti:
public: Viditelný všude. Výchozí modifikátor.internal: Viditelný pouze uvnitř jednoho modulu. Modul je soubor Kotlinových souborů kompilovaných dohromad.protected: Viditelný uvnitř třídy a jejích podtříd (včetně členů definovaných v dědičných třídách). Není viditelný mimo balíček.private: Viditelný pouze uvnitř souboru, ve kterém je deklarován. U členů třídy je viditelný pouze uvnitř této třídy (včetně jejího companion object, vnořených a vnitřních tříd).
Použití modifikátorů:
- U tříd, rozhraní, objektů a jejich konstruktorů.
- U funkcí, vlastností a jejich getterů/setterů na nejvyšší úrovni (mimo třídy).
- U členů třídy (vnořené třídy, vnitřní třídy, funkce, vlastnosti).
Příklad:
// Soubor: example.kt
private const val PRIVATE_CONSTANT = 1 // Viditelný pouze v tomto souboru
internal fun internalFunction() { // Viditelný pouze uvnitř modulu
println("Interní funkce volána")
}
open class BaseClass {
protected val protectedProperty = "Vědomé" // Viditelné v této třídě a jejích podtřídách
fun publicMethod() { // Viditelné všude (výchozí public)
println("Veřejná metoda volána")
}
private fun privateMethod() { // Viditelné pouze uvnitř BaseClass
println("Privátní metoda volána")
}
}
class DerivedClass : BaseClass() {
fun accessProtected() {
println("Přístup k chráněné vlastnosti: $protectedProperty") // Přístup k protected
// privateMethod() // Chyba: private není viditelné v podtřídě
}
}
fun main() {
val base = BaseClass()
base.publicMethod()
// base.protectedProperty // Chyba: protected není viditelné mimo třídu a její podtřídy
val derived = DerivedClass()
derived.accessProtected()
internalFunction()
// PRIVATE_CONSTANT // Chyba: private na nejvyšší úrovni je viditelná pouze v deklarovaném souboru
}
| Modifikátor | Přístupnost | Kde použít |
|---|---|---|
public |
Všude | Výchozí, když není uveden jiný modifikátor |
internal |
Uvnitř modulu | Pro API uvnitř knihovny nebo modulu |
protected |
Uvnitř třídy a jejích podtříd (pro členy třídy) | Pro vytváření hierarchií tříd s dědičností |
private |
Uvnitř souboru (pro nejvyšší úroveň); uvnitř třídy (pro členy) | Pro skrytí implementačních detailů uvnitř souboru nebo třídy |