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