Luokan metodien ylikuormituksella tarkoitetaan samannimisen metodin kirjoittamista useaan kertaan erilaisella muodollisten parametrien listalla. Java -tulkki/kääntäjä osaa itse päättää mitä metodia se kutsuu parametrien määrän ja tyypin perusteella.Tyypillinen ylikuormitettava metodi on luokan muodostin. Seuraavassa on kirjoitettu luokka omena usealla eri muodostimella
Esimerkki 42
class omena {
String vari, maku; //luokan muuttujat
boolean matoisuus;
public omena(String vari1, String maku1, boolean matoisuus1) // luokan omena muodostin kolmella parametrilla
{ this.vari=vari1;
this.maku=maku1;
this.matoisuus = matoisuus1;
}
public omena(String vari1, String maku1) // luokan omena muodostin kahdella parametrilla
{ this.vari=vari1;
this.maku=maku1;
}
public omena(String vari1) // luokan omena muodostin yhdellä parametrilla
{ this.vari=vari1;
}
public omena() // luokan omena muodostin ilman parametreja
{
}
public omena(omena malliOmena) // luokan omena muodostin parametrina omena -luokan olio
{ this.vari = malliOmena.vari;
this.maku = malliOmena.maku;
this.matoisuus = malliOmena.matoisuus;
}
void asetaVari(String vari1)
{
this.vari=vari1;
}
void asetaMaku(String maku1)
{
this.maku=maku1;
}
void asetaMatoisuus(boolean matoisuus1)
{
this.matoisuus=matoisuus1;
}
void tulostaAttribuutit()
{
System.out.println(" Vari: " + this.vari + "\n Maku " +this.maku+ "\n Matoisuus " + this.matoisuus);
}
}
Nyt omena -luokan objekti voidaan muodostaa seuraavilla tavoilla
omena syysOmena=new omena("Punainen","Makea",false);
omena makeaOmena=new omena("Punainen","Makea");
omena raakile=new omena("Vihreä");
omena kukinto=new omena();
omena toinenSyysOmena = new omena(syysOmena);
Kirjoitamme tämän avulla esimerkin 42
class E42 {
public static void main(String args[]){
omena syysOmena=new omena("Punainen","Makea",false);
omena makeaOmena=new omena("Punainen","Makea");
omena raakile=new omena("Vihreä");
omena kukinto=new omena();
syysOmena.tulostaAttribuutit();
makeaOmena.tulostaAttribuutit(); // Miksi matoisuus tulostuu arvaoan false?
raakile.tulostaAttribuutit(); // Miksi maku tulostuu arvona null
kukinto.tulostaAttribuutit();
toinenSyysOmena.tulostaAttribuutit();
}
}
Ylikuormittamalla ei voida kuitenkaan tehdä omena -luokkaan kahta muodostinta seuraavasti.
public omena(String vari1) // luokan omena muodostin yhdellä parametrilla
{ this.vari=vari1;
}
public omena(String maku1) // luokan omena muodostin yhdellä parametrilla
{ this.maku=maku1;
}
Tässä tapauksessa luokalla olisi kaksi samannimistä metodia, joissa on sama määrä samanlaisia parametreja. Tätä javan kielioppi ei hyväksy. Ylikuormituksen yhteydessä parametreja voi olla sama määrä, mutta niiden tulee tyypiltään erilaisia.
Samalla tavalla kuin muodostinta, voidaan ylikuormittaa mitä tahansa metodia.
Vastaus