Sobes.tech
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)
სად ხდება ერთ კლასში ან კლასების ჰიერქიაში შვილობილი კლასში
მეთოდის სახელი ერთიდაიგივე ერთიდაიგივე
სიგნატურა განსხვავებული (რაოდენობა, ტიპები, წესები) ერთიდაიგივე
დაბრუნების ტიპი შეიძლება იყოს განსხვავებული (მაგრამ ეს არ არის ერთადერთი განსხვავება) უნდა იყოს იგივე ან კოვარიანტული (ობიექტებისთვის)
მიზანი სხვადასხვა ტიპის მონაცემებისთვის ან არგუმენტების რაოდენობისთვის ერთ მოქმედების რამდენიმე ვარიანტის მიწოდება მემკვიდრეობით მიღებული მეთოდის ცვლილება შვილობილი კლასში
მეთოდების კავშირი დამოუკიდებელი მეთოდები "არის" კავშირი (მემკვიდრეობა)
პოლიმორფიზმი კომპილაციის ეტაპზე პოლიმორფიზმი (სტატიკური) შესრულების ეტაპზე პოლიმორფიზმი (დინამიკური)