Inheritance and Exceptions
Har qanday OOP tilida siz sinflar ierarxiyasini yaratishingiz mumkin va Dart ham bundan mustasno emas.
Example :
Ko’rganingizdek, A super klass yoki “parent” deb ataladi, B esa subClass (yoki "child").
Metodlar child classlarda qaytadan override qilib moslashtirilib ishlatilishi mumkin.
@override izohi ixtiyoriy, lekin yaxshisi buni ishlatgan ma’qul.
Starting from Dart 2.9 onwards, implicit downcasts are not allowed:
What is the implicit downcasts : https://codewithandrea.com/articles/implicit-downcast-no-longer-allowed/
Siz merosxo’rlikni bloklay olmaysiz, chunki har bir sinfda extends modifikator bo'lishi mumkin.
Masalan, Java-da siz final class A {} yozishingiz mumkin, bu degani "Siz mendan meros qilib olmaysiz " deyilishidir. Lekin Dartda bunday narsa yo'q.
Oddiy metodlardan tashqari siz setters (set) va getters (get) ni ham override qilishingiz mumkin. Dart C++ kabi bir nechta merosxo’rlikni (multiple inheritance) qo'llab-quvvatlamaydi, ya'ni extends faqat bitta class bilan ishlaydi.
super and constructors .
Dartdagi har bir subsinf avtomatik ravishda superklassning standart konstruktorini chaqirishga harakat qiladi.
Biroq, class oddiy yani constructor yo’q bo'lsa, yoki parametrsiz bo’lsa super constructor kerak emas;
Abstract classes.
abstract kalit so'zi to'g'ridan-to'g'ri yaratib(ishlatib) va Undan obyekt olib bo'lmaydigan classni belgilaydi, faqat undan meros olingan classlarga mumkin. abstract class odatdagidek bir (yoki bir nechta) konstruktorni bo’lishi mumkin.
Odatda abstract class funksiya tanasiz, tananing o'rniga, nuqta-vergul (;) qo'yish bilan aniqlanishi mumkin bo'lgan abstract funksiyalarni o'z ichiga oladi. Oddiy classlarda abstract funsiyalarni aniqlay olmaysiz.
getters va setters ham abstract bo'lishi mumkin
Why We need Abstract Classes ?
Interfaces
Boshqa dasturlash tillaridan farqli o'laroq, Dartda interface kalit so'zi yo'q va
interfeyslarni yaratish uchun classlardan foydalanishingiz kerak.
implements bu yerda kalit so’z. Oddiy classlardan farqli o'laroq, bu erda siz ParentClass/interfeys tomonidan belgilangan har bir methodni override qilishingiz kerak.
Resourses : https://stacksecrets.com/flutter/implements-v-s-extends-v-s-with-keywords-in-dart
extends vs implements
Biz extends child classlar uchun ekanligini ko’rdik, implements esa interface classlar uchun edi. Endi ikkisining texnik farqlarini korib chiqaylik:
Class B extends A {} dan foydalanganda siz A classniing har bir methodni override qilishga majbur EMASsiz. Merosxo’rlik olinadi va siz xohlagan metodingizni override qilishingiz yoki qilmasligingiz mumkin.
Implements da esa aksincha.
Dart da bir nechta merosga yani multiple inheritance ga ruxsat berilmagan bo'lsa-da, siz class ni kengaytirishingiz va undan ko'proq narsani amalga oshirishingiz mumkin Masalan, Java va C# ham shunday yo'l tutadi.
// Error
class A extends B, C, D {}
// Valid
class A extends B implements C, D {}
https://www.geeksforgeeks.org/dart-extends-vs-with-vs-implements/
The Object class
Kodda aniq yozilmagan bo'lsa ham, har qanday Dart klassi Object {} sinfidan turlatilgan bo’ladi. Bu ba'zi mashhur tillar bilan bir xil tuzilishdir Java, C# va Delphi kabi. Har bir class Object classida e'lon qilingan metodlarni bekor qilishi mumkin va kerak bo’lganda override qilib ishlatishi mumkin bo’ladi.
• String toString().
final f = Fraction(1, 2);
final s = "My fraction is $f";
bu yerda String interpolatsiyasi avtomatik ravishda toString() ni chaqiradi, bu kodni qisqartiradi va qulay qiladi.
____________________________________________________________
Ikkita ob'ektni solishtirmoqchi bo'lganingizda == operatoridan foydalaniladi. Lekin bu doim siz kutgandek ishlamaydi, Agarki ikkita o'zgaruvchi bir xil ob'ektga ishora qilmasa.
Mantiqan biz ularni teng deb o'ylardik, lekin kompilyator bizga boshqa javob ko’rsatmoqda. ex1 va ex2 mantiqan teng, lekin farq qiladigan ikki xil ob'ektni amalda ko'rsating, chunki har bir o'zgaruvchi boshqa instance ga ega.
Istalgan natijalarni olish uchun tenglik operatorini override qilishingiz kerak
Do'stlaringiz bilan baham: |