- Erilaisia tapoja ylikuormittaa menetelmää
- Muuttamalla nro. argumenteista
- Muuttamalla tietotyyppiä
- Miksi menetelmän ylikuormitus ei ole mahdollista vaihtamalla palautustyyppiä
- Voimmeko ylikuormittaa päämenetelmää
- 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.
Menetelmän ylikuormituksen etu
Menetelmän ylikuormitus lisää ohjelman luettavuutta .
Erilaisia tapoja ylikuormittaa menetelmää
Javassa on kaksi tapaa ylikuormittaa menetelmää
- Muuttamalla argumenttien määrää
- 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:
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