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") // Корголгонго жетүү
        // 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 Файл ичинде (жогорку деңгээл); синф ичинде (мүчөлөр үчүн) Ишке ашыруунун деталдарын жашыруу үчүн