logo

Metodes pārslodze Java

Java versijā Method Overloading ļauj dažādām metodēm iegūt vienu un to pašu nosaukumu, bet dažādus parakstus, kur paraksts var atšķirties pēc ievades parametru skaita vai ievades parametru veida vai abu kombinācijas.

Metodes pārslodze Java ir pazīstama arī kā Kompilēšanas laika polimorfisms , Statiskais polimorfisms vai Agrīna iesiešana . Metodes pārslodze salīdzinājumā ar vecāku argumentu, pakārtotajam argumentam tiks piešķirta augstākā prioritāte.



Metodes pārslodzes piemērs

Java






// Java program to demonstrate working of method> // overloading in Java> > public> class> Sum {> >// Overloaded sum(). This sum takes two int parameters> >public> int> sum(>int> x,>int> y) {>return> (x + y); }> > >// Overloaded sum(). This sum takes three int parameters> >public> int> sum(>int> x,>int> y,>int> z)> >{> >return> (x + y + z);> >}> > >// Overloaded sum(). This sum takes two double> >// parameters> >public> double> sum(>double> x,>double> y)> >{> >return> (x + y);> >}> > >// Driver code> >public> static> void> main(String args[])> >{> >Sum s =>new> Sum();> >System.out.println(s.sum(>10>,>20>));> >System.out.println(s.sum(>10>,>20>,>30>));> >System.out.println(s.sum(>10.5>,>20.5>));> >}> }>



>

sdlc

>

Izvade

30 60 31.0>

Dažādi metodes pārslodzes veidi Java

  • Parametru skaita maiņa.
  • Argumentu datu tipu maiņa.
  • Metožu parametru secības maiņa

1. Parametru skaita maiņa

Metodes pārslodzi var panākt, mainot parametru skaitu, vienlaikus pārejot uz dažādām metodēm.

Zemāk ir aprakstīta iepriekš minētās metodes ieviešana:

Java




// Java Program to Illustrate Method Overloading> // By Changing the Number of Parameters> > // Importing required classes> import> java.io.*;> > // Class 1> // Helper class> class> Product {> >// Method 1> >// Multiplying two integer values> >public> int> multiply(>int> a,>int> b)> >{> >int> prod = a * b;> >return> prod;> >}> > >// Method 2> >// Multiplying three integer values> >public> int> multiply(>int> a,>int> b,>int> c)> >{> >int> prod = a * b * c;> >return> prod;> >}> }> > // Class 2> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Creating object of above class inside main()> >// method> >Product ob =>new> Product();> > >// Calling method to Multiply 2 numbers> >int> prod1 = ob.multiply(>1>,>2>);> > >// Printing Product of 2 numbers> >System.out.println(> >'Product of the two integer value :'> + prod1);> > >// Calling method to multiply 3 numbers> >int> prod2 = ob.multiply(>1>,>2>,>3>);> > >// Printing product of 3 numbers> >System.out.println(> >'Product of the three integer value :'> + prod2);> >}> }>

>

>

Izvade

Product of the two integer value :2 Product of the three integer value :6>

2. Argumentu datu tipu maiņa

Daudzos gadījumos metodes var uzskatīt par pārslogotām, ja tām ir vienāds nosaukums, bet atšķiras parametru veidi, metodes tiek uzskatītas par pārslogotām.

Zemāk ir aprakstīta iepriekš minētās metodes ieviešana:

Java




// Java Program to Illustrate Method Overloading> // By Changing Data Types of the Parameters> > // Importing required classes> import> java.io.*;> > // Class 1> // Helper class> class> Product {> >// Multiplying three integer values> >public> int> Prod(>int> a,>int> b,>int> c)> >{> >int> prod1 = a * b * c;> >return> prod1;> >}> > >// Multiplying three double values.> >public> double> Prod(>double> a,>double> b,>double> c)> >{> >double> prod2 = a * b * c;> >return> prod2;> >}> }> > class> GFG {> >public> static> void> main(String[] args)> >{> >Product obj =>new> Product();> > >int> prod1 = obj.Prod(>1>,>2>,>3>);> >System.out.println(> >'Product of the three integer value :'> + prod1);> > >double> prod2 = obj.Prod(>1.0>,>2.0>,>3.0>);> >System.out.println(> >'Product of the three double value :'> + prod2);> >}> }>

>

>

Izvade

Product of the three integer value :6 Product of the three double value :6.0>

3. Metožu parametru secības maiņa

Metodes pārslodzi var īstenot arī, pārkārtojot divu vai vairāku pārslogotu metožu parametrus. Piemēram, ja 1. metodes parametri ir (virknes nosaukums, int roll_no) un otra metode ir (int roll_no, virknes nosaukums), bet abām ir vienāds nosaukums, tad šīs 2 metodes tiek uzskatītas par pārslogotām ar dažādām parametru secībām. .

Zemāk ir aprakstīta iepriekš minētās metodes ieviešana:

Java




// Java Program to Illustrate Method Overloading> // By changing the Order of the Parameters> > // Importing required classes> import> java.io.*;> > // Class 1> // Helper class> class> Student {> >// Method 1> >public> void> StudentId(String name,>int> roll_no)> >{> >System.out.println(>'Name :'> + name +>' '> >+>'Roll-No :'> + roll_no);> >}> > >// Method 2> >public> void> StudentId(>int> roll_no, String name)> >{> >// Again printing name and id of person> >System.out.println(>'Roll-No :'> + roll_no +>' '> >+>'Name :'> + name);> >}> }> > // Class 2> // Main class> class> GFG {> >// Main function> >public> static> void> main(String[] args)> >{> >// Creating object of above class> >Student obj =>new> Student();> > >// Passing name and id> >// Note: Reversing order> >obj.StudentId(>'Spyd3r'>,>1>);> >obj.StudentId(>2>,>'Kamlesh'>);> >}> }>

>

>

Izvade

Name :Spyd3r Roll-No :1 Roll-No :2 Name :Kamlesh>

Ko darīt, ja precīzs prototips nesakrīt ar argumentiem?

Prioritātes ziņā kompilators veic šādas darbības:

  • Ierakstiet Conversion, bet uz augstāku tipu (diapazona ziņā) tajā pašā saimē.
  • Ierakstiet konvertēšana uz nākamo augstāko saimi (pieņemsim, ja int datu tipam nav pieejams garš datu tips, tas meklēs peldošo datu tipu).
Ierakstiet Conversion Java

Ņemsim piemēru, lai precizētu jēdzienu:

Java




// Demo Class> class> Demo {> >public> void> show(>int> x)> >{> >System.out.println(>'In int'> + x);> >}> >public> void> show(String s)> >{> >System.out.println(>'In String'> + s);> >}> >public> void> show(>byte> b)> >{> >System.out.println(>'In byte'> + b);> >}> }> > class> UseDemo {> >public> static> void> main(String[] args)> >{> >byte> a =>25>;> >Demo obj =>new> Demo();> > >// it will go to> >// byte argument> >obj.show(a);> > >// String> >obj.show(>'hello'>);> > >// Int> >obj.show(>250>);> > >// Since char is> >// not available, so the datatype> >// higher than char in terms of> >// range is int.> >obj.show(>'A'>);> > >// String> >obj.show(>'A'>);> > >// since float datatype> >// is not available and so it's higher> >// datatype, so at this step their> >// will be an error.> >obj.show(>7.5>);> >}> }>

>

>

Izvade

./UseDemo.java:46: error: no suitable method found for show(double) obj.show(7.5); ^ method Demo.show(int) is not applicable (argument mismatch; possible lossy conversion from double to int) method Demo.show(String) is not applicable (argument mismatch; double cannot be converted to String) method Demo.show(byte) is not applicable (argument mismatch; possible lossy conversion from double to byte) 1 error>

Metodes pārslodzes priekšrocības

  • Metodes pārslodze uzlabo programmas lasāmību un atkārtotu lietojamību.
  • Metodes pārslodze samazina programmas sarežģītību.
  • Izmantojot metodes pārslodzi, programmētāji var veikt uzdevumu efektīvi un produktīvi.
  • Izmantojot metodes pārslodzi, ir iespējams piekļūt metodēm, kas veic saistītas funkcijas ar nedaudz atšķirīgiem argumentiem un veidiem.
  • Klases objektus var arī inicializēt dažādos veidos, izmantojot konstruktorus.

Svarīgi jautājumi Java valodā

Q1. Vai mēs varam pārslogot statiskās metodes?

Atbilde:

Atbilde ir ' '. Mums var būt divas vai vairākas statiskas metodes ar vienādu nosaukumu, taču ievades parametri atšķiras. Piemēram, apsveriet šādu Java programmu. Lai uzzinātu vairāk par to, skatiet rakstu - Vai Java mēs varam pārslogot vai ignorēt statiskās metodes?

Q2. Vai mēs varam pārslogot metodes, kas atšķiras tikai ar statiskiem atslēgvārdiem?

Atbilde:

Mēs nevar pārslogojiet divas Java metodes, ja tās atšķiras tikai ar statisku atslēgvārdu (parametru skaits un parametru veidi ir vienādi). Piemēram, skatiet tālāk norādīto Java programmu. Sīkāku informāciju skatiet šeit.

Q3. Vai Java mēs varam pārslogot main()?

Atbilde:

Tāpat kā citas statiskās metodes, mēs var pārslodze main() Java .

Java


kas ir map java



// Java program with overloaded main()> import> java.io.*;> > public> class> Test {> >// Normal main()> >public> static> void> main(String[] args)> >{> >System.out.println(>'Hi Geek (from main)'>);> >Test.main(>'Geek'>);> >}> > >// Overloaded main methods> >public> static> void> main(String arg1)> >{> >System.out.println(>'Hi, '> + arg1);> >Test.main(>'Dear Geek'>,>'My Geek'>);> >}> > >public> static> void> main(String arg1, String arg2)> >{> >System.out.println(>'Hi, '> + arg1 +>', '> + arg2);> >}> }>

>

>

Izvade

Hi Geek (from main) Hi, Geek Hi, Dear Geek, My Geek>

Q4. Vai Java atbalsta operatora pārslodzi?

Atbilde:

Atšķirībā no C++, Java nepieļauj lietotāja definētus pārslogotus operatorus. Java iekšēji pārslogo operatorus, piemēram, + ir pārslogots savienošanai.

Q5. Vai mēs varam pārslogot atgriešanas veida metodes?

Atbilde:

Mēs nevaram pārslogot pēc atgriešanas veida. Šī uzvedība ir tāda pati kā C++. Sīkāku informāciju skatiet šeit.

Java




/*package whatever //do not write package name here */> > import> java.io.*;> > public> class> Main {> >public> int> foo() {>return> 10>; }> > >// compiler error: foo() is already defined> >public> char> foo() {>return> 'a'>; }> > >public> static> void> main(String args[]) {}> }>

>

>

Kļūda

./Main.java:8: error: method foo() is already defined in class Main public char foo() { return 'a'; } ^ 1 error>

Tomēr atgriešanās veida pārslodzes metodes ir iespējamas gadījumos, kad ir skaidri norādīts izsaucamās funkcijas datu tips. Apskatiet tālāk sniegtos piemērus.

Java




// Java program to demonstrate the working of method> // overloading in static methods> > import> java.io.*;> > public> class> Main {> > >public> static> int> foo(>int> a) {>return> 10>; }> >public> static> char> foo(>int> a,>int> b) {>return> 'a'>; }> > >public> static> void> main(String args[])> >{> >System.out.println(foo(>1>));> >System.out.println(foo(>1>,>2>));> >}> }>

>

>

Izvade

10 a>

Java




// Java program to demonstrate working of method> // overloading in methods> class> A {> >public> int> foo(>int> a) {>return> 10>; }> > >public> char> foo(>int> a,>int> b) {>return> 'a'>; }> }> > public> class> Main {> > >public> static> void> main(String args[])> >{> >A a =>new> A();> >System.out.println(a.foo(>1>));> >System.out.println(a.foo(>1>,>2>));> >}> }>

>

>

Izvade

10 a>

Q6. Kāda ir atšķirība starp pārslodzi un ignorēšanu?

Atbilde:

Pārslodze ir aptuveni viena un tā pati funkcija ar dažādiem parakstiem. Pārsvarā ir aptuveni viena un tā pati funkcija un viens un tas pats paraksts, bet dažādas klases, kas saistītas ar mantošanu.

Pārslodze pret ignorēšanu Java

Pārslodze ir kompilatora laika polimorfisma piemērs, un ignorēšana ir izpildes laika polimorfisma piemērs.

Saistītie raksti

  • Dažādi metodes pārslodzes veidi Java
  • Metodes pārslodze un nulles kļūda Java
  • Vai Java mēs varam pārslogot vai ignorēt statiskās metodes?