logo

Menetelmän ylikuormitus Javassa

  1. Erilaisia ​​tapoja ylikuormittaa menetelmää
  2. Muuttamalla nro. argumenteista
  3. Muuttamalla tietotyyppiä
  4. Miksi menetelmän ylikuormitus ei ole mahdollista vaihtamalla palautustyyppiä
  5. Voimmeko ylikuormittaa päämenetelmää
  6. menetelmän ylikuormitus Type Promotionilla

Jos luokkaa on useita menetelmiä, joilla on sama nimi, mutta eri parametrit, se tunnetaan nimellä Menetelmän ylikuormitus .

Jos meidän on suoritettava vain yksi operaatio, menetelmän samanniminen lisää menetelmien luettavuutta ohjelmoida .

merkkijono char javaan

Oletetaan, että sinun on suoritettava annettujen lukujen yhteenlasku, mutta argumentteja voi olla kuinka monta tahansa, jos kirjoitat menetelmän, kuten a(int,int) kahdelle parametrille ja b(int,int,int) kolmelle parametrille, Sinun ja muiden ohjelmoijien voi olla vaikea ymmärtää menetelmän toimintaa, koska sen nimi vaihtelee.

Joten suoritamme menetelmän ylikuormituksen selvittääksemme ohjelman nopeasti.

java-menetelmän ylikuormitus

Menetelmän ylikuormituksen etu

Menetelmän ylikuormitus lisää ohjelman luettavuutta .

Erilaisia ​​tapoja ylikuormittaa menetelmää

Javassa on kaksi tapaa ylikuormittaa menetelmää

  1. Muuttamalla argumenttien määrää
  2. Muuttamalla tietotyyppiä

Javassa Method Overloading ei ole mahdollista muuttamalla vain menetelmän palautustyyppiä.


1) Menetelmä Ylikuormitus: muutos nro. argumenteista

Tässä esimerkissä olemme luoneet kaksi menetelmää, ensimmäinen add()-menetelmä suorittaa kahden luvun yhteenlaskemisen ja toinen add-menetelmä suorittaa kolmen luvun lisäämisen.

Tässä esimerkissä luomme staattiset menetelmät joten meidän ei tarvitse luoda ilmentymää menetelmien kutsua varten.

 class Adder{ static int add(int a,int b){return a+b;} static int add(int a,int b,int c){return a+b+c;} } class TestOverloading1{ public static void main(String[] args){ System.out.println(Adder.add(11,11)); System.out.println(Adder.add(11,11,11)); }} 
Testaa nyt

Lähtö:

 22 33 


2) Menetelmän ylikuormitus: argumenttien tietotyypin muuttaminen

Tässä esimerkissä olemme luoneet kaksi menetelmää, jotka eroavat toisistaan Testaa nyt

Lähtö:

 22 24.9 

K) Miksi Method Overloading ei ole mahdollista muuttamalla vain menetelmän palautustyyppiä?

Javassa menetelmän ylikuormitus ei ole mahdollista vaihtamalla metodin palautustyyppiä vain epäselvyyden vuoksi. Katsotaan kuinka epäselvyyttä voi esiintyä:

 class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }} 
Testaa nyt

Lähtö:

 Compile Time Error: method add(int,int) is already defined in class Adder 

System.out.println(Adder.add(11,11)); //Kuinka java voi määrittää, mikä summa()-menetelmä pitäisi kutsua?

Huomautus: Käännösaikavirhe on parempi kuin Run Time Error. Joten, java-kääntäjä tekee kääntäjän aikavirheen, jos ilmoitat samalla menetelmällä samat parametrit.

Voimmeko ylikuormittaa java main() -menetelmää?

Kyllä, menetelmän ylikuormituksella. Luokassa voi olla mikä tahansa määrä päämenetelmiä ylikuormitettuna. Mutta JVM kutsuu main()-menetelmää, joka vastaanottaa merkkijonotaulukon vain argumentteina. Katsotaanpa yksinkertainen esimerkki:

vertailukelpoinen java
 class TestOverloading4{ public static void main(String[] args){System.out.println('main with String[]');} public static void main(String args){System.out.println('main with String');} public static void main(){System.out.println('main without args');} } 
Testaa nyt

Lähtö:

 main with String[] 

Menetelmän ylikuormitus ja tyypin edistäminen

Yksi tyyppi korotetaan implisiittisesti toiseksi, jos vastaavaa tietotyyppiä ei löydy. Ymmärretään käsite alla olevan kuvan avulla:

Java-menetelmän ylikuormitus tyypin edistämisellä

Kuten yllä olevassa kaaviossa näkyy, tavu voidaan ylentää lyhyeksi, int-, pitkäksi, kelluvaksi tai tuplaamiseksi. Lyhyt tietotyyppi voidaan yltää int-, long-, float- tai double-muotoon. Char-tietotyypiksi voidaan yltää int, long, float tai double ja niin edelleen.

Esimerkki menetelmän ylikuormituksesta TypePromotionin avulla

 class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } } 
Testaa nyt
 Output:40 60 

Esimerkki menetelmän ylikuormituksesta tyypin edistämisellä, jos vastaavuus löytyy

Jos menetelmässä on vastaavia tyyppiargumentteja, tyypin korottamista ei suoriteta.

 class OverloadingCalculation2{ void sum(int a,int b){System.out.println('int arg method invoked');} void sum(long a,long b){System.out.println('long arg method invoked');} public static void main(String args[]){ OverloadingCalculation2 obj=new OverloadingCalculation2(); obj.sum(20,20);//now int arg sum() method gets invoked } } 
Testaa nyt
 Output:int arg method invoked 

Esimerkki menetelmän ylikuormituksesta tyypin edistämisellä epäselvyyden sattuessa

Jos menetelmässä ei ole vastaavantyyppisiä argumentteja ja jokainen menetelmä edistää samaa määrää argumentteja, on epäselvyyttä.

 class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } } 
Testaa nyt
 Output:Compile Time Error 

Yhtä tyyppiä ei poisteta implisiittisesti, esimerkiksi kaksinkertaista ylennystä ei voida implisiittisesti poistaa mihinkään tyyppiin.