Sobes.tech
Junior

Mis on nähtavuse modifikaatorid ja kuidas neid Kotlinis kasutada?

sobes.tech AI

Vastus AI-lt

Kotlinis redzamības modifikatori nosaka pieejamību deklarācijām (klasēm, interfeisiem, funkcijām, īpašībām) citās programmas daļās.

Galvenie redzamības modifikatori:

  • public: redzams visur. Noklusējuma modifikators.
  • internal: redzams tikai vienā modulī. Modulis tiek uzskatīts par Kotlin failu kopumu, kas tiek kompilēts kopā.
  • protected: redzams klases un tās mantinieku (ieskaitot locekļus, kas definēti mantiniekos) iekšienē. No ārpuses no pakotnes nav redzams.
  • private: redzams tikai tajā failā, kur tas ir deklarēts. Klases locekļiem tas ir redzams tikai šajā klasē (ieskaitot tās companion object, iekšējās un iekšējās klases).

Modifikatoru lietojums:

  • Klases, interfeisi, objekti un to konstruktoros.
  • Funkcijās, īpašībās un to getteros/setteros augstākā līmenī (ārpus klases).
  • Klases locekļos (iekšējās klases, iekšējās klases, funkcijas, īpašības).

Piemērs:

// Faila: example.kt

private const val PRIVATE_CONSTANT = 1 // Redzams tikai šajā failā

internal fun internalFunction() { // Redzams tikai modulī
    println("Iekšējā funkcija")
}

open class BaseClass {
    protected val protectedProperty = "Aizsargāts" // Redzams šajā klasē un tās mantiniekos

    fun publicMethod() { // Redzams visur (noklusējuma public)
        println("Publiskais metodes")
    }

    private fun privateMethod() { // Redzams tikai šīs klases iekšienē
        println("Privāta metode")
    }
}

class DerivedClass : BaseClass() {
    fun accessProtected() {
        println("Piekļuve aizsargātajai īpašībai: $protectedProperty") // Piekļuve protected
        // privateMethod() // Kļūda: private nav redzams mantiniekā
    }
}

fun main() {
    val base = BaseClass()
    base.publicMethod()
    // base.protectedProperty // Kļūda: protected nav redzams ārpus klases un tās mantiniekiem

    val derived = DerivedClass()
    derived.accessProtected()

    internalFunction()
    // PRIVATE_CONSTANT // Kļūda: private ir redzams tikai deklarācijas failā
}
Modifikators Pieejamība Kur izmantot
public Visur Noklusējuma, ja nav norādīts cits modifikators
internal Moduļa iekšienē API iekš bibliotēkas vai moduļa
protected Klases un tās mantinieku iekšienē (locekļiem) Klases hierarhiju veidošanai un mantošanai
private Faila iekšienē (augšējā līmenī); klases iekšienē (locekļiem) Detalju slēpšanai faila vai klases iekšienē