Junior
რა შეიძლება შეიცვალოს მეთოდების გადატვირთვის დროს პროგრამირებაში?
sobes.tech AI
პასუხი AI-სგან
მეთოდის გადატვირთვის (method overloading) დროს შეიძლება შეიცვალოს:
- პარამეტრების რაოდენობა: ერთიდაიგივე სახელის მქონე მეთოდებს შეიძლება ჰქონდეთ სხვადასხვა რაოდენობის ფორმალური პარამეტრები.
- პარამეტრების ტიპები: ერთიდაიგივე სახელის და რაოდენობის პარამეტრებით მეთოდები შეიძლება განსხვავდებოდნენ ამ პარამეტრების ტიპებით.
- პარამეტრების ტიპების მიმდევრობის წესები: თუ მეთოდებს აქვთ ერთიდაიგივე რაოდენობის და ტიპის პარამეტრები, მაგრამ ისინი განლაგებულია სხვადასხვა წესით, ეს ასევე ითვლება გადატვირთვად.
Java-ს მაგალითი:
// კლასი გადატვირთული მეთოდებით
class Calculator {
// მეთოდი ორი მთელი რიცხვის დამატებისთვის
public int add(int a, int b) {
return a + b;
}
// გადატვირთული მეთოდი: სამი მთელი რიცხვის დამატება
public int add(int a, int b, int c) {
return a + b + c;
}
// გადატვირთული მეთოდი: ორი რიცხვის დამატება რეალური წერტილებით
public double add(double a, double b) {
return a + b;
}
// გადატვირთული მეთოდი: მთელი რიცხვის და რეალური რიცხვის დამატება
public double add(int a, double b) {
return a + b;
}
// გადატვირთული მეთოდი: რეალური რიცხვის და მთელი რიცხვის დამატება
public double add(double a, int b) {
return a + b;
}
}
რა არ შეიძლება შეიცვალოს მეთოდის გადატვირთვისას:
- დაბრუნების ტიპი: ორი მეთოდი ერთიდაიგივე სახელით და ერთიდაიგივე სიგნატურით (რაოდენობა, ტიპები და წესები) არ შეიძლება განსხვავდებოდნენ მხოლოდ დაბრუნების ტიპით.
- წვდომის მოდიფიკატორები: წვდომის მოდიფიკატორები (public, private, protected, default) არ გავლენენ გადატვირთვაზე.
static-ის არსებობა ან არარსებობა: სტატიკური მეთოდის გადატვირთვა შეუძლებელია, თუ მასთან ერთად არ არის განსაზღვრული ნესტატიკური მეთოდი იგივე სიგნატურით, ან პირიქით.- მოვლენის სია, რომელიც მეთოდს უქმნის: მოვლენის სია არ არის ნაწილი მეთოდის სიგნატურის, რომლის მიხედვითაც კომპილატორი განასხვავებს გადატვირთულ მეთოდებს.
შედარება გადატვირთვის და გადახედვის (overriding) მეთოდების:
| ნიშნული | გადატვირთვა (Overloading) | გადახედვა (Overriding) |
|---|---|---|
| სად ხდება | ერთ კლასში ან კლასების ჰიერქიაში | შვილობილი კლასში |
| მეთოდის სახელი | ერთიდაიგივე | ერთიდაიგივე |
| სიგნატურა | განსხვავებული (რაოდენობა, ტიპები, წესები) | ერთიდაიგივე |
| დაბრუნების ტიპი | შეიძლება იყოს განსხვავებული (მაგრამ ეს არ არის ერთადერთი განსხვავება) | უნდა იყოს იგივე ან კოვარიანტული (ობიექტებისთვის) |
| მიზანი | სხვადასხვა ტიპის მონაცემებისთვის ან არგუმენტების რაოდენობისთვის ერთ მოქმედების რამდენიმე ვარიანტის მიწოდება | მემკვიდრეობით მიღებული მეთოდის ცვლილება შვილობილი კლასში |
| მეთოდების კავშირი | დამოუკიდებელი მეთოდები | "არის" კავშირი (მემკვიდრეობა) |
| პოლიმორფიზმი | კომპილაციის ეტაპზე პოლიმორფიზმი (სტატიკური) | შესრულების ეტაპზე პოლიმორფიზმი (დინამიკური) |