Sobes.tech
Junior

Millal loetakse meetodit ülekirjutatuks (overriding)?

sobes.tech AI

Vastus AI-lt

Meetod loetakse ülekirjutatuks, kui alamklassis deklareeritakse meetod, mille süntaks on sama (meetodi nimi, parameetrite arv ja tüübid samas järjekorras) kui vanemklassis. Lisaks:

  1. Vanemklassise meetod ei tohi olla deklareeritud final-ina (või ekvivalentse modifikaatorina teistes keeltes), mis takistab ülekirjutamist.
  2. Ülekirjutatud meetodi juurdepääsutasand alamklassis ei tohi olla rangem kui vanemklassis.
  3. Ülekirjutatud meetod võib tagastada sama tüüpi või kovariantiivse tüübi (alam-tüübi algsest tüübist).
  4. Ülekirjutatud meetod ei tohi visata üldisemaid (või sobimatuid) erandeid kui vanemklassise meetodi puhul.
  5. Statilised meetodid ei saa olla ülekirjutatud, vaid ainult peidetud (hidden).

Kui kutsutakse ülekirjutatud meetodit vanemklassile viitava viitega, kuid alamklassist objekti kasutades, käivitatakse alamklassi versioon (polümorfism).

// Näide Java keeles

class Parent {
    public void display() { // Vanemklassi meetod
        System.out.println("Parent display");
    }

    // final void cannotOverride() { ... } // Seda meetodit ei saa ülekirjutada
}

class Child extends Parent {
    @Override // @Override annotatsioon aitab kompilaatoril kontrollida, kas meetod on tõesti ülekirjutatud
    public void display() { // Ülekirjutatud meetod - sama signatuur
        System.out.println("Child display");
    }
}