logo

Menetelmän ylikuormitus Javassa

Javassa Method Overloading sallii eri menetelmien saman nimen, mutta eri allekirjoitukset, joissa allekirjoitus voi vaihdella syöttöparametrien lukumäärän tai syöttöparametrien tyypin tai molempien yhdistelmän mukaan.

Menetelmän ylikuormitus Javassa tunnetaan myös nimellä Käännösajan polymorfismi , staattinen polymorfismi tai Varhainen sidonta . Method overloading verrattuna yläargumenttiin lapsiargumentti saa korkeimman prioriteetin.

Esimerkki menetelmän ylikuormituksesta

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>));> >}> }>

>

merkkijono char javaan

>

Lähtö

30 60 31.0>

Erilaisia ​​​​menetelmien ylikuormitustapoja Javassa

  • Parametrien lukumäärän muuttaminen.
  • Argumenttien tietotyyppien muuttaminen.
  • Menetelmien parametrien järjestyksen muuttaminen

1. Parametrien lukumäärän muuttaminen

Menetelmän ylikuormitus voidaan saavuttaa muuttamalla parametrien määrää samalla kun siirrytään eri menetelmiin.

Alla on yllä olevan menetelmän toteutus:

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);> >}> }>

>

>

Lähtö

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

2. Argumenttien tietotyyppien muuttaminen

Monissa tapauksissa menetelmiä voidaan pitää ylikuormitettuina, jos niillä on sama nimi, mutta eri parametrityypit, menetelmiä pidetään ylikuormitettuina.

Alla on yllä olevan menetelmän toteutus:

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);> >}> }>

>

>

Lähtö

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

3. Menetelmien parametrien järjestyksen muuttaminen

Menetelmän ylikuormitus voidaan toteuttaa myös järjestämällä uudelleen kahden tai useamman ylikuormitetun menetelmän parametrit. Esimerkiksi, jos menetelmän 1 parametrit ovat (merkkijonon nimi, int roll_no) ja toinen menetelmä on (int roll_no, merkkijonon nimi), mutta molemmilla on sama nimi, näiden kahden menetelmän katsotaan olevan ylikuormitettu erilaisilla parametrisarjoilla .

Alla on yllä olevan menetelmän toteutus:

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'>);> >}> }>

>

>

Lähtö

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

Entä jos tarkka prototyyppi ei täsmää argumenttien kanssa?

Tärkeimmällä tavalla kääntäjä suorittaa seuraavat vaiheet:

  • Tyyppi Muunnos, mutta korkeampaan tyyppiin (alueen suhteen) samassa perheessä.
  • Kirjoita muunnos seuraavaan ylempään perheeseen (oletetaan, jos int-tietotyypille ei ole saatavilla pitkää tietotyyppiä, se etsii float-tietotyyppiä).
Kirjoita Javalla Conversion

Otetaan esimerkki konseptin selventämiseksi:

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>);> >}> }>

>

>

Lähtö

./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>

Menetelmän ylikuormituksen edut

  • Menetelmän ylikuormitus parantaa ohjelman luettavuutta ja uudelleenkäytettävyyttä.
  • Menetelmän ylikuormitus vähentää ohjelman monimutkaisuutta.
  • Käyttämällä menetelmän ylikuormitusta ohjelmoijat voivat suorittaa tehtävän tehokkaasti ja tehokkaasti.
  • Menetelmien ylikuormitusta käyttämällä on mahdollista päästä käsiksi toisiinsa liittyviä toimintoja suorittaviin menetelmiin hieman erilaisilla argumenteilla ja tyypeillä.
  • Luokan objektit voidaan myös alustaa eri tavoin konstruktoreilla.

Tärkeitä kysymyksiä Javassa

Q1. Voimmeko ylikuormittaa staattisia menetelmiä?

Vastaus:

Vastaus on ' Joo '. Meillä voi olla kaksi tai useampi staattinen menetelmä, joilla on sama nimi, mutta syöttöparametreissa on eroja. Harkitse esimerkiksi seuraavaa Java-ohjelmaa. Saat lisätietoja tästä artikkelista - Voimmeko ylikuormittaa tai ohittaa staattiset menetelmät Javassa?

Q2. Voimmeko ylikuormittaa menetelmiä, jotka eroavat vain staattisten avainsanojen perusteella?

Vastaus:

Me ei voi ylikuormittaa kaksi menetelmää Javassa, jos ne eroavat vain staattisen avainsanan perusteella (parametrien määrä ja parametrityypit ovat samat). Katso esimerkiksi seuraava Java-ohjelma. Katso tästä lisätietoja.

Q3. Voimmeko ylikuormittaa main():ta Javassa?

Vastaus:

Kuten muutkin staattiset menetelmät, me voi overload main() Javassa.

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);> >}> }>

>

>

Lähtö

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

Q4. Tukeeko Java operaattorin ylikuormitusta?

Vastaus:

Toisin kuin C++, Java ei salli käyttäjän määrittämiä ylikuormitettuja operaattoreita. Sisäisesti Java ylikuormittaa operaattoreita, esimerkiksi + on ylikuormitettu ketjutusta varten.

Q5. Voimmeko ylikuormittaa menetelmiä palautustyypillä?

Vastaus:

Emme voi ylikuormittaa palautustyypin mukaan. Tämä käyttäytyminen on sama C++:ssa. Katso tästä lisätietoja.

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[]) {}> }>

vertailukelpoinen java

>

>

Virhe

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

Palautustyypin ylikuormitusmenetelmät ovat kuitenkin mahdollisia tapauksissa, joissa kutsuttavan funktion tietotyyppi on erikseen määritelty. Katso alla olevat esimerkit:

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>));> >}> }>

>

>

Lähtö

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>));> >}> }>

>

>

Lähtö

10 a>

Q6. Mitä eroa on Overloading ja Overriding välillä?

Vastaus:

Ylikuormitus on suunnilleen sama toiminto, jolla on erilaiset allekirjoitukset. Ohittava on suunnilleen sama funktio ja sama allekirjoitus, mutta eri luokkia, jotka on yhdistetty periytymisen kautta.

Ylikuormitus vs ohittaminen Javassa

Ylikuormitus on esimerkki kääntäjän aikapolymorfismista ja ohitus on esimerkki ajonaikaisesta polymorfismista.

Aiheeseen liittyvät artikkelit

  • Erilaisia ​​tapoja menetelmän ylikuormitukseen Javassa
  • Menetelmän ylikuormitus ja nollavirhe Javassa
  • Voimmeko ylikuormittaa tai ohittaa staattiset menetelmät javassa?