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-от присъствие или отсутствие: Не може да се пренатовари статичен метод с дефиниране на нестатичен с такава сигнатура, или обратно.
  • Листата на изключения: Листата на изключения не е част от сигнатурата на метода и не се взема предвид при пренатоварване.

Сравнение между пренатоварване и презаписване на методи:

Карактеристика Пренатоварване (Overloading) Презаписване (Overriding)
Къде се случва В една класа или в йерархия на класове В наследена класа
Име на метода Едно и също Едно и също
Сигнатура на метода Различна (брой, типове, ред на параметрите) Една и съща
Тип на връщане Може да бъде различен (но не е единствената разлика) Трябва да бъде същият или ковариантен (за обекти)
Цел Предоставяне на различни варианти на едно действие за различни типове данни или брой аргументи Промяна на поведението на наследен метод в наследена класа
Връзка между методите Независими методи Връзка "е" (наследяване)
Полиморфизъм Полиморфизъм в етапа на компилация (статичен) Полиморфизъм в етапа на изпълнение (динамичен)