Sobes.tech
Junior

Kotlin'da sinf va interfeys o'rtasidagi asosiy farqlar nimalarda?

sobes.tech AI

AIdan javob

  • Sinf: xususiyatlar (holatlar) va funksiyalar (xulq-atvor) bo'lishi mumkin. U abstrakt, ochiq (meros olish uchun) yoki yakuniy bo'lishi mumkin. Konstruktorlar obyektlarni yaratish usulini belgilaydi. Bir sinfdan meros olish va ko'p interfeyslarni amalga oshirishni qo'llab-quvvatlaydi.
  • Interfeys: sinflar amalga oshirishi kerak bo'lgan xulq-atvor shartnomasini belgilaydi. Abstrakt funksiyalar va xususiyatlar deklaratsiyalarini, shuningdek, implementatsiyali funksiyalarni (Java 8+) o'z ichiga olishi mumkin. Holatlar (backing maydonli xususiyatlar) bo'lishi mumkin emas. Bir sinf bir nechta interfeyslarni amalga oshirishi mumkin. Konstruktorlarga ega emas.

Taqqoslash jadvali:

Nuqta Sinf Interfeys
Holat Qiymatga ega bo'lgan xususiyatlar bo'lishi mumkin. Qiymatga ega bo'lgan xususiyatlar bo'lishi mumkin emas (faqat abstraktlar).
Konstruktorlar Mavjud bo'lishi mumkin. Mavjud emas.
Amalga oshirish To'liq amalga oshirishni taqdim etishi mumkin. Qisman yoki to'liq amalga oshirish (default metodlar bilan).
Meros olish Bir sinfdan meros oladi. Bir nechta interfeyslarni amalga oshiradi.
Initsializatsiya Obyekt sifatida yaratilishi mumkin. To'g'ridan-to'g'ri yaratilmaydi.
Turi Aniq yoki abstrakt. Faqat xulq-atvor shartnomasi.

Sinf misoli:

class Person(val name: String) { // konstruktor va xususiyat bilan sinf
    fun greet() {
        println("Hello, my name is $name")
    }
}

Interfeys misoli:

interface Greeter { // metod bilan interfeys
    fun greet()
}

class EnglishGreeter : Greeter { // interfeysni amalga oshiruvchi sinf
    override fun greet() {
        println("Hello!")
    }
}