Izpitno vprašanje RAČ2PRA 500

Iz MaFiRaWiki

Ta članek ali del članka je v delu. Veseli bomo, če ga boste dopolnili in popravili.

Kaj pomeni to opozorilo?


Vprašanje

|Vpr. 500| Kaj je preobteževanje in kaj prekrivanje metod? Podaj primer!

Odgovor

Preobteževanje (overloading): več metod z enakim imenom.

  • Metode se morajo razlikovati ne v imenu ampak podpisu.
  • Podpis metode: ime + število in tipi parametrov.
  • Return tip ni del podpisa.
  • Tudi navadne metode ne le konstruktorji so lahko preobtežene. Možnost, da imamo enako poimenovano metodo, ki pa sprejema parametre različnega tipa. Metoda ploščina, ki kot parameter dobi objekt iz razreda Kvadrat, Krog ali Pravokotnik.
  • Uporaba: ploscina(bla), kjer je bla lahko objekt tipa Kvadrat, Krog ali Pravokotnik. Tri metode, z enakim imenom a z različnimi podpisi. Enostavnejša uporaba kot tri metode z različnimi imeni ali ena metoda kjer preverimo kakšen objekt smo dobili. Enostavneje, če dobimo še četrti tip objekta - v glavno kodo ni potrebno posegati, klic je še vedno ploscina(bla). Primer preobteženih metod: Math.abs() lahko uporabimo na tipu double in tipu int. Dve metodi:
     1. Prekrite metode: V predniku (neposrednem - extends … ali posrednem) definirana metoda nam ne ustreza.
     2. Predefiniranje(overriding): prekrite metode. Enak podpis metode kot pri predniku - velja naša definicija.

  1. public int sestej(int a, int b) {
  2. return (a+b);
  3. }
  4. public int sestej(int a, int b, int c) {
  5. return (a+b+c);
  6. }
  7. public double sestej(double a, double b) {
  8. return (a+b);
  9. }

Če v razredu uporabimo več metod z enakimi imeni (prekrivanje) se morajo te razlikovati med seboj po številu parametrov in/ali tipu parametrov, ki jih prejmejo.

Tip, ki ga metode vračajo, pri prekrivanju metod, ne igra nobene vloge.

Prekrivanje metod (overriding): Pri objektih se pogosto srečamo s prekrivanjem metod - recimo pri dedovanju. Razred Object v Javi vsebuje metodo toString s podpisom public String toString() . Recimo, da imamo podrazred od razreda Object, po imenu MojRazred. Če imamo metodo toString z istim podpisom v razredu MojRazred, se ne bo klicala metoda toString iz razreda Object, ampak iz razreda MojRazred.

  1. public class MojRazred {
  2. private int stevec = 4;
  3. //Prekrije metodo toString v razredu Object.
  4. public String toString() {
  5. return "stevec = " + stevec;
  6. }
  7. }

Glej tudi

Osebna orodja