Ilkka Koivistoinen 13.02.2002

Edellinen

Seuraava

8.4 Metodien ylikuormitus

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.

Tehtäviä

  1. Tee luokkaan omena ylikuormitettu metodi tulostaAttribuutit(), jolla saa eri parametrien määrällä tulostettua eri tietoja omenoista.

    Vastaus

Ilkka Koivistoinen 13.02.2002

Edellinen

Seuraava