V Javi preobremenitev metod omogoča, da imajo različne metode isto ime, vendar različne podpise, kjer se lahko podpisi razlikujejo po številu vhodnih parametrov ali vrsti vhodnih parametrov ali mešanici obojega.
Preobremenitev metod v Javi je znana tudi kot Polimorfizem med prevajanjem , statični polimorfizem, oz Zgodnja vezava . Pri preobremenitvi metode v primerjavi z nadrejenim argumentom bo podrejeni argument dobil najvišjo prednost.
Primer preobremenitve metode
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> ));> > }> }> |
>
predmet json v Javi
>Izhod
30 60 31.0>
Različni načini preobremenitve metod v Javi
- Spreminjanje števila parametrov.
- Spreminjanje tipov podatkov argumentov.
- Spreminjanje vrstnega reda parametrov metod
1. Spreminjanje števila parametrov
Preobremenitev metode je mogoče doseči s spreminjanjem števila parametrov med prehodom na različne metode.
Spodaj je izvedba zgornje metode:
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);> > }> }> |
>
>Izhod
Product of the two integer value :2 Product of the three integer value :6>
2. Spreminjanje tipov podatkov argumentov
V mnogih primerih se metode lahko štejejo za preobremenjene, če imajo isto ime, vendar različne vrste parametrov, metode se štejejo za preobremenjene.
Spodaj je izvedba zgornje metode:
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);> > }> }> |
>
>Izhod
Product of the three integer value :6 Product of the three double value :6.0>
3. Spreminjanje vrstnega reda parametrov metod
Preobremenitev metode je mogoče izvesti tudi s preureditvijo parametrov dveh ali več preobremenjenih metod. Na primer, če sta parametra metode 1 (ime niza, int roll_no) in druga metoda (int roll_no, ime niza), vendar imata obe isto ime, potem velja, da sta ti dve metodi preobremenjeni z različnimi zaporedji parametrov .
Spodaj je izvedba zgornje metode:
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'> );> > }> }> |
>
>Izhod
Name :Spyd3r Roll-No :1 Roll-No :2 Name :Kamlesh>
Kaj pa, če se natančen prototip ne ujema z argumenti?
Prioritetno prevajalnik naredi naslednje korake:
- Pretvorba tipa, vendar v višjo vrsto (v smislu obsega) v isti družini.
- Pretvorba tipa v naslednjo višjo družino (predpostavimo, da ni na voljo dolgega podatkovnega tipa za int podatkovni tip, potem bo iskal podatkovni tip float).

Vzemimo primer, da pojasnimo koncept:
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> );> > }> }> |
>
>
Izhod
./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>
Prednosti preobremenitve metode
- Preobremenitev metod izboljša berljivost in ponovno uporabnost programa.
- Preobremenitev metod zmanjša kompleksnost programa.
- Programerji lahko s preobremenitvijo metode nalogo izvedejo učinkovito in uspešno.
- S preobremenitvijo metod je mogoče dostopati do metod, ki izvajajo sorodne funkcije z nekoliko drugačnimi argumenti in vrstami.
- Objekte razreda lahko tudi inicializiramo na različne načine z uporabo konstruktorjev.
Pomembna vprašanja v Javi
Q1. Ali lahko preobremenimo statične metode?
odgovor:
Odgovor je ' ja ’. Imamo lahko dve ali več statičnih metod z enakim imenom, vendar razlikami v vhodnih parametrih. Na primer, razmislite o naslednjem programu Java. Če želite izvedeti več o tem, glejte članek – Ali lahko v Javi preobremenimo ali preglasimo statične metode?
Q2. Ali lahko preobremenimo metode, ki se razlikujejo le po statičnih ključnih besedah?
odgovor:
mi ne more preobremeni dve metodi v Javi, če se razlikujeta le po statični ključni besedi (število parametrov in tipi parametrov so enaki). Oglejte si na primer naslednji program Java. Za podrobnosti si oglejte to.
Q3. Ali lahko preobremenimo main() v Javi?
odgovor:
Tako kot druge statične metode tudi mi lahko preobremenitev main() v Javi.
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);>
>
}>
}>
>>IzhodHi Geek (from main) Hi, Geek Hi, Dear Geek, My Geek>
Q4. Ali Java podpira preobremenitev operaterja?
odgovor:
Za razliko od C++ Java ne dovoljuje uporabniško definiranih preobremenjenih operaterjev. Interno Java preobremeni operatorje, na primer + je preobremenjen za veriženje.
V5. Ali lahko preobremenimo metode pri vrnjenem tipu?
odgovor:
Ne moremo preobremeniti glede na vrsto povratka. To vedenje je enako v C++. Za podrobnosti si oglejte to.
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[]) {}>
}>
>>Napaka
./Main.java:8: error: method foo() is already defined in class Main public char foo() { return 'a'; } ^ 1 error>Vendar so metode preobremenitve pri vrnjenem tipu možne v primerih, ko je podatkovni tip klicane funkcije izrecno določen. Oglejte si spodnje primere:
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>
));>
>
}>
}>
>>Izhod10 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>
));>
>
}>
}>
>>Izhodc# datum in čas10 a>
V6. Kakšna je razlika med preobremenitvijo in preglasitvijo?
odgovor:
Preobremenitev je približno ista funkcija z različnimi podpisi. Preglasitev gre za isto funkcijo in isti podpis, vendar različne razrede, povezane z dedovanjem.
![]()
Preobremenitev je primer polimorfizma časa prevajalnika, preglasitev pa primer polimorfizma časa izvajanja.
povezani članki
- Različni načini preobremenitve metod v Javi
- Preobremenitev metode in napaka Null v Javi
- Ali lahko preobremenimo ali preglasimo statične metode v Javi?