Sobes.tech
Junior

რა არის ხილვადობის მოდიფიკატორები და როგორ გამოიყენოთ ისინი Kotlin-ში?

sobes.tech AI

პასუხი AI-სგან

Kotlin- ში ხილვადობის მოდიფიკატორები განსაზღვრავენ განცხადებების (კლასების, ინტერფეისების, ფუნქციების, თვისებების) ხელმისაწვდომობას სხვა პროგრამის ნაწილებისთვის.

ძირითადი ხილვადობის მოდიფიკატორები:

  • public: ჩანს ყველგან. დეფოლტია.
  • internal: ჩანს მხოლოდ ერთ მოდულში. მოდული ითვლება Kotlin ფაილების ერთობლიობად, რომლებიც ერთობლივად კომპილირდებიან.
  • protected: ჩანს კლასის და მისი მემკვიდრეების (შეიცვლით წევრებს, რომლებიც განსაზღვრულია მემკვიდრე კლასებში). გარეთ პაკეტიდან არ ჩანს.
  • private: ჩანს მხოლოდ იმ ფაილში, სადაც გამოაცხადა. კლასის წევრებისთვის, მხოლოდ ამ კლასის შიგნით ჩანს (იგივე მისი companion object, შიგნით და შიგნით კლასები).

გამოყენების შემთხვევები:

  • კლასებზე, ინტერფეისებზე, ობიექტებზე და მათი კონსტრუქტორებზე.
  • ფუნქციებზე, თვისებებზე და მათი getter/setter-ებზე ზედა დონეზე (კლასების გარეთ).
  • კლასის წევრებზე (შიგნეული კლასები, შიგნითა კლასები, ფუნქციები, თვისებები).

მაგალითი:

// ფაილი: example.kt

private const val PRIVATE_CONSTANT = 1 // მხოლოდ ამ ფაილში ჩანს

internal fun internalFunction() { // მხოლოდ მოდულში ჩანს
    println("შიდა ფუნქცია")
}

open class BaseClass {
    protected val protectedProperty = "დაცული" // ჩანს ამ კლასში და მის შთამომავლობაში

    fun publicMethod() { // ყველგან ჩანს (პარამეტრი public)
        println("საჯარო მეთოდი")
    }

    private fun privateMethod() { // მხოლოდ BaseClass-ის შიგნით ჩანს
        println("პირადი მეთოდი")
    }
}

class DerivedClass : BaseClass() {
    fun accessProtected() {
        println("წვდომა დაცულ თვისებას: $protectedProperty") // წვდომა protected-ზე
        // privateMethod() // შეცდომა: private არ ჩანს შთამომავლობაში
    }
}

fun main() {
    val base = BaseClass()
    base.publicMethod()
    // base.protectedProperty // შეცდომა: protected გარეთ კლასისა და მისი შთამომავლობის არ ჩანს

    val derived = DerivedClass()
    derived.accessProtected()

    internalFunction()
    // PRIVATE_CONSTANT // შეცდომა: private ზედა დონეზე მხოლოდ გამოყოფილ ფაილში ჩანს
}
მოდიფიკატორი ხელმისაწვდომობა სად გამოიყენოთ
public ყველგან დეფოლტია, როდესაც სხვა მოდიფიკატორი არ არის მითითებული
internal მოდულში API-ისთვის ბიბლიოთეკაში ან მოდულში
protected კლასში და მისი შთამომავლობაში (მხოლოდ წევრებისთვის) კლასების ჰიერქიების შექმნისთვის და მემკვიდრეობისთვის
private ფაილში (ზედა დონეზე); კლასში (მხოლოდ წევრებისთვის) დეტალების დამალვისთვის ფაილში ან კლასში