Oba ponovno uporabita ime metode, vendar sta fundamentalno različna. = isto ime, , v istem razredu, razrešeno pri . = podrazred metodo starša z , razrešeno pri .
Oba ponovno uporabita ime metode, vendar sta fundamentalno različna. = isto ime, , v istem razredu, razrešeno pri . = podrazred metodo starša z , razrešeno pri .
| Preobremenjevanje | Pregrada | |
|---|---|---|
| Signatura | Mora biti drugačna (parametri) | Mora biti enaka |
| Razmerje | Isti razred | Starš ↔ podrazred |
| Razrešeno | Čas prevajanja (statično) | Čas izvajanja (dinamično) |
| Namen | Priročnost / različice | Polimorfizem |
class Printer {
void print(String s) { System.out.println(s); }
void print(int n) { System.out.println(n); } // same name, diff param
void print(String s, int times) { /* ... */ }
}
Prevodilnik izbere, kateri print na podlagi vrst argumentov — brez dedovanja.
class Animal { String speak() { return "..."; } }
class Dog extends Animal {
@Override
String speak() { return "Woof"; } // replaces Animal.speak()
}
Animal a = new Dog();
a.speak(); // "Woof" — runtime picks Dog's version (dynamic dispatch)
Česta napaka je naključno preobremenjevanje, ko si nameravali pregrado (npr. tipka v signaturi). Vedno uporabite @Override (Java) ali override (C#), da ga prevodilnik ujame.
Pregrada je motor polimorfizma — mehanizem ob izvajanju, ki omogoči "en vmesnik, veliko izvedb".
Znanje razlike preprečuje klasično napako: mišljenje, da ste spremenili vedenje, medtem ko ste pravzaprav ustvarili drugo, nikoli klicano metodo.
Knjižnica IT vprašanj za razgovore s podrobnimi odgovori — od začetnika do izkušenega.
Doniraj