Разкажи ми за правилата за пренатоварване на методи.
sobes.tech AI
Отговор от AI
Претоварване на методи (Method Overloading) в обектно-ориентираното програмиране позволява да се дефинират няколко метода в един клас с едно и също име, но с различни сигнатури.
Основните правила за претоварване на методи:
-
Различие в сигнатурите: Сигнатурата на метода включва името на метода и списъка с типове на неговите параметри в съответния ред. За да се счита, че методите са претоварени, техните сигнатури трябва да се различават.
// Примери за различни сигнатури void print(int i) { } void print(String s) { } void print(int i, String s) { } void print(String s, int i) { } // Различава редът на параметрите -
Името на метода трябва да е едно и също: Претоварените методи трябва да имат едно и също име.
// Правилен пример за претоварване class Example { void process(int a) { } void process(double b) { } } -
Типът на върнатата стойност не е част от сигнатурата: Промяната само на типа на върнатата стойност не прави методите претоварени. Компилаторът няма да може да различи кой метод да извика, ако сигнатурите на параметрите са еднакви.
// Не е претоварване - грешка при компилация int calculate() { return 1; } String calculate() { return "error"; } -
Модификаторите за достъп и спецификаторите за изключения не влияят на претоварването: Аналогично на типа на върнатата стойност, промяната само на модификаторите за достъп (
public,private,protected, default) или списъка с изключения (throws) не води до претоварване.// Не е претоварване - грешка при компилация, ако сигнатурите на параметрите са еднакви public void doSomething() { } private void doSomething() { } -
Порядъкът на параметрите има значение: Промяната на реда на типовете параметри прави сигнатурите различни.
// Е претоварване void setup(int width, int height) { } void setup(int height, String unit) { } // Различава се по втория параметър void setup(String unit, int size) { } // Различава се по типа и реда на параметрите -
Броят на параметрите има значение: Различният брой параметри води до различни сигнатури.
// Е претоварване void log(String message) { } void log(String message, int level) { }
Следователно, ключовият фактор за претоварване е уникалността на сигнатурата на метода, която се определя от името му и набора (типовете и реда) на параметрите.