Sobes.tech
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:

  1. Tėvų klasės metodas neturi būti deklaruotas kaip final (arba ekvivalentus modifikatorius kituose kalbose), kuris užkerta kelią perrašymui.
  2. Perrašyto metodo prieigos lygis vaikų klasėje negali būti griežtesnis nei tėvų klasės metode.
  3. Perrašytas metodas gali grąžinti tą patį tipą kaip ir tėvų klasės metodas arba kovariantinį tipą (subtipą originalaus tipo).
  4. Perrašytas metodas negali mesti platesnių (arba nesuderinamų) išimčių nei nurodyta tėvų klasės metode.
  5. 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");
    }
}