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!")
}
}