Խոսեք մեթոդների ավելցուկային կանոնների մասին։
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) { }
Այսպիսով, բեռնաթափման հիմնական գործոնը մեթոդի սիգնատուրայի յուրահատուկությունն է, որը սահմանվում է նրա անունով և պարամետրերի (տիպերով և կարգով) հավաքածուով։