Sobes.tech
Middle

მეტოდების გადატვირთვის წესების შესახებ მომიყევი.

sobes.tech AI

პასუხი AI-სგან

მეთოდების გადატვირთვა (Method Overloading) ობიექტზე ორიენტირებულ პროგრამირებაში საშუალებას აძლევს ერთ კლასში რამდენიმე მეთოდის განსაზღვრა ერთიდაიგივე სახელით, მაგრამ სხვადასხვა სიგნატურით.

მეთოდების გადატვირთვის ძირითადი წესები:

  1. სიგნატურებში განსხვავება: მეთოდის სიგნატურა მოიცავს მეთოდის სახელს და მისი პარამეტრების ტიპების სიის შესაბამის წესრიგში. იმისათვის, რომ მეთოდები ჩაითვალოს გადატვირთულად, მათი სიგნატურები უნდა განსხვავდებოდეს.

    // განსხვავებული სიგნატურების მაგალითები
    void print(int i) { }
    void print(String s) { }
    void print(int i, String s) { }
    void print(String s, int i) { } // პარამეტრების წესრიგი განსხვავებულია
    
  2. მეთოდის სახელმა უნდა იყოს ერთნაირი: გადატვირთული მეთოდები უნდა ჰქონდეთ ერთნაირი სახელი.

    // სწორი მაგალითი გადატვირთვის
    class Example {
        void process(int a) { }
        void process(double b) { }
    }
    
  3. დაბრუნების ტიპი სიგნატურის ნაწილი არ არის: მხოლოდ დაბრუნების ტიპის ცვლილება არ ქმნის მეთოდების გადატვირთვას. კომპილატორი ვერ შეძლებს განსაზღვროს, რომელი მეთოდი უნდა გამოიძახოს, თუ სიგნატურები ერთნაირია:

    // არ არის გადატვირთვა - კომპილაციის შეცდომა
    int calculate() { return 1; }
    String calculate() { return "error"; }
    
  4. წვდომის მოდიფიკატორები და გამონაკლისების სპეციფიკატორები არ ახდენენ გავლენას გადატვირთვაზე: ასევე, მხოლოდ დაბრუნების ტიპის ცვლილება, წვდომის მოდიფიკატორების (public, private, protected, default) ან გამონაკლისების სიების (throws) ცვლილება, არ იწვევს გადატვირთვას:

    // არ არის გადატვირთვა - კომპილაციის შეცდომა, თუ სიგნატურები ერთნაირია
    public void doSomething() { }
    private void doSomething() { }
    
  5. პარამეტრების წესრიგი მნიშვნელოვანია: პარამეტრების ტიპების ცვლილება ქმნის განსხვავებულ სიგნატურებს:

    // არის გადატვირთვა
    void setup(int width, int height) { }
    void setup(int height, String unit) { } // განსხვავდება მეორე პარამეტრით
    void setup(String unit, int size) { } // განსხვავდება ტიპით და წესრიგით
    
  6. პარამეტრების რაოდენობა მნიშვნელოვანია: სხვადასხვა რაოდენობის პარამეტრები ქმნის განსხვავებულ სიგნატურებს:

    // არის გადატვირთვა
    void log(String message) { }
    void log(String message, int level) { }
    

ამიტომ, გადატვირთვის ძირითადი ფაქტორი არის მეთოდის სიგნატურის უნიკალურობა, რომელიც განსაზღვრულია მისი სახელით და პარამეტრების (ტიპებით და წესრიგით) ნაკრებით.