Sobes.tech
Middle

Kotlin'da sinf ichidagi ob'ekt va ob'ekt hamkori o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Klass ichidagi ichki obyekt (inner object) tashqi klassning nusxasiga bog'langan bo'lib, uning hayot aylanishi davomida mavjud bo'ladi. Hamkor obyekt (companion object) singleton sifatida mavjud bo'lib, klass nusxasiga bog'liq emas va to'g'ridan-to'g'ri klass nomi orqali kirish mumkin.

Asosiy farqlar:

  • Nusxaga bog'liqlik: inner object tashqi klass nusxasiga bog'langan, companion object bog'liq emas.
  • Kirish: inner object ga faqat tashqi klass nusxasi orqali kirish mumkin, companion object esa to'g'ridan-to'g'ri klass nomi bilan kiriladi.
  • Holat: inner object nusxaga xos holatga ega bo'lishi mumkin, companion object esa butun klass uchun umumiy.
  • Foydalanish: inner object odatda State shabloni uchun yoki bog'liq obyektlarni nusxa ichida guruhlash uchun ishlatiladi. companion object ishlab chiqarish metodlari, konstantalar yoki statik a'zolar uchun ishlatiladi.

Misol:

class Outer {
    private var outerValue: Int = 0

    inner object InnerObject {
        fun accessOuterValue(): Int {
            return outerValue // inner object tashqi klass a'zolariga kirish huquqiga ega
        }
    }

    companion object CompanionObject {
        const val CONSTANT = "Some constant"

        fun createOuter(): Outer {
            return Outer() // ishlab chiqarish metodi
        }
    }
}

fun main() {
    val outer = Outer.CompanionObject.createOuter() // hamkor obyektiga kirish
    // val inner = Outer.InnerObject // Xato: Outer nusxasi bo'lmasdan InnerObject ga kirish mumkin emas
    val inner = outer.InnerObject // nusxa orqali inner obyektga kirish

    println(inner.accessOuterValue())
    println(Outer.CompanionObject.CONSTANT)
    println(Outer.CONSTANT) // sintaktik shakar hamkor obyekt a'zalariga kirishni osonlashtiradi
}