Junior
Kada metodas laikomas perrašytu (overriding)?
sobes.tech AI
Atsakymas iš AI
Metodas laikomas perrašytu, kai vaikų klasėje deklaruojamas metodas su ta pačia signatūra (metodo pavadinimas, parametrų skaičius ir tipai toje pačioje tvarkoje), kaip ir tėvų klasėje. Be to:
- Tėvų klasės metodas neturi būti deklaruotas kaip
final(arba ekvivalentus modifikatorius kituose kalbose), kuris užkerta kelią perrašymui. - Perrašyto metodo prieigos lygis vaikų klasėje negali būti griežtesnis nei tėvų klasės metode.
- Perrašytas metodas gali grąžinti tą patį tipą kaip ir tėvų klasės metodas arba kovariantinį tipą (subtipą originalaus tipo).
- Perrašytas metodas negali mesti platesnių (arba nesuderinamų) išimčių nei nurodyta tėvų klasės metode.
- Statiniai metodai negali būti perrašyti, tik paslėpti (hidden).
Kai kviečiama perrašyta metodą per nuorodą į tėvų klasę, bet su vaikų klasės objektu, vykdoma vaikų klasės versija (polimorfizmas).
// Pavyzdys Java kalba
class Parent {
public void display() { // Tėvų klasės metodas
System.out.println("Parent display");
}
// final void cannotOverride() { ... } // Šio metodo negalima perrašyti
}
class Child extends Parent {
@Override // @Override anotacija padeda kompiliatoriui patikrinti, ar metodas tikrai perrašytas
public void display() { // Perrašytas metodas - ta pati signatūra
System.out.println("Child display");
}
}