Middle
Dart-ში აბსტრაქტული კლასი და მიკსინი რა განსხვავებაა?
sobes.tech AI
პასუხი AI-სგან
აბსტრაქტული კლასი:
- პირდაპირი ინსტანცირება არ შეიძლება.
- შეიძლება შეიცავდეს აბსტრაქტულ მეთოდებს (რეალიზაციის გარეშე) და რეალიზებულ მეთოდებს.
- კლასი იშლება აბსტრაქტული კლასი
extendsგასაღების სიტყვით. - კლასი შეიძლება იშლება მხოლოდ ერთი კლასი (სინგლ თაობა).
მიქსინი:
- პირდაპირი ინსტანცირება არ შეიძლება.
- კონსტრუქტორები არ შეიძლება ჰქონდეს.
- შეიძლება შეიცავდეს რეალიზებულ მეთოდებს, მაგრამ არ შეიძლება ჰქონდეს აბსტრაქტული მეთოდები (Dart 2.1-მდე, სადაც გამოჩნდა აბსტრაქტული მიქსინები).
- კლასები იყენებენ მიქსინების ფუნქციონალობას
withგასაღების სიტყვით. - კლასი შეიძლება გამოიყენოს რამდენიმე მიქსინი.
- გამოიყენება კოდის გადამეორებისთვის და ფუნქციონალობის დამატებისთვის კლასებს შორის, მემკვიდრეობის გარეშე. არსებითად, ეს საშუალებას აძლევს "ჩამატოთ" ქცევა.
აბსტრაქტული კლასი მაგალითი:
abstract class Animal {
void makeSound(); // აბსტრაქტული მეთოდი
void eat() {
print('ჭამა...');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('ვუוף!');
}
}
მიქსინის მაგალითი:
mixin CanJump {
void jump() {
print('ხტომა!');
}
}
class Cat with CanJump { }
შედარება სქემატურად:
| ნიშნული | აბსტრაქტული კლასი | მიქსინი |
|---|---|---|
| ინსტანცირება | არა | არა |
| კონსტრუქტორი | შეიძლება ჰქონდეს | არ შეიძლება ჰქონდეს |
| აბსტრაქტული მეთოდები | შეიძლება ჰქონდეს | არ შეიძლება (Dart 2.1-მდე) |
| რეალიზებული მეთოდები | შეიძლება ჰქონდეს | შეიძლება ჰქონდეს |
| გამოყენება | extends |
with |
| მემკვიდრეობა/გამოყენება | ერთჯერადი მემკვიდრეობა | მრავალჯერადი გამოყენება |
| დანიშნულება | საერთო კონტრაქტის განსაზღვრა | კოდის გადამეორება, ქცევის დამატება |