Preglasitev metode Java

V tej vadnici bomo s pomočjo primerov spoznali preglasitev metode v Javi.

V zadnji vaji smo izvedeli o dedovanju. Dedovanje je lastnost OOP, ki nam omogoča, da iz obstoječega razreda (superrazred) izpeljemo nov razred (podrazred). Podrazred podeduje atribute in metode nadrazreda.

Če je enaka metoda definirana tako v superrazredu kot tudi v podrazredu, potem metoda razreda podrazreda preglasi metodo nadrazreda. To je znano kot preglasitev metode.

Primer 1: Preglasitev metode

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( @Override public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Izhod :

 Jaz sem pes. 

V zgornjem programu je displayInfo()metoda prisotna tako v superrazredu živali kot v podrazredu psov.

Ko prikličemo displayInfo()z uporabo predmeta d1 (objekt podrazreda), se pokliče metoda znotraj podrazreda Dog. displayInfo()Postopek podrazreda preglasi isto metodo nadrazreda.

Upoštevajte uporabo @Overridepripisa v našem primeru. V Javi so pripisi metapodatki, ki smo jih uporabili za zagotavljanje informacij prevajalniku. Tu @Overridepripis določa prevajalnik, da metoda po tem pripisu preglasi metodo nadrazreda.

Uporaba ni obvezna @Override. Ko pa to uporabimo, mora metoda upoštevati vsa pravila razveljavitve. V nasprotnem primeru bo prevajalnik ustvaril napako.

Pravila preglasitve Java

  • Tako superrazred kot podrazred morata imeti isto ime metode, isti tip vrnitve in enak seznam parametrov.
  • Ne moremo preglasiti metode, razglašene kot finalin static.
  • Vedno bi morali preglasiti abstraktne metode superrazreda (o njih bomo razpravljali v kasnejših vajah).

super ključna beseda v Java Overriding

Pogosto vprašanje, ki se pojavi med izvajanjem razveljavitve v Javi, je:

Ali lahko dostopimo do metode superrazreda po razveljavitvi?

No, odgovor je Da . Za dostop do metode superrazreda iz podrazreda uporabimo superključno besedo.

2. primer: Uporaba super ključne besede

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( super.displayInfo(); System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Izhod :

Jaz sem žival. Jaz sem pes.

V zgornjem primeru podrazred Dog preglasi metodo displayInfo()nadrazreda Žival.

Ko prikličemo metodo displayInfo()z uporabo predmeta d1 podrazreda Dog, se pokliče metoda znotraj podrazreda Dog; metoda znotraj superrazreda ni poklicana.

Znotraj displayInfo()podrazreda Dog smo včasih super.displayInfo()klicali displayInfo()nadrazred.

Pomembno je omeniti, da konstruktorji v Javi niso podedovani. Zato v Javi ni takega, kot da bi preoblikoval konstruktor.

Konstruktor nadrazreda pa lahko pokličemo iz njegovih podrazredov. Za to uporabljamo super(). Če želite izvedeti več, obiščite ključno besedo Java super.

Dostop do določevalnikov v preglasitvi metode

Ista metoda, deklarirana v nadrazredu in njegovih podrazredih, ima lahko različne specifikatorje dostopa. Vendar obstaja omejitev.

Specifikatorje dostopa lahko uporabimo samo v podrazredih, ki zagotavljajo večji dostop kot specifikator dostopa superklase. Na primer

Recimo, da myClass()je deklarirana metoda v superrazredu protected. Potem je lahko ista metoda myClass()v podrazredu bodisi publicali protected, a ne private.

Primer 3: Določnik dostopa v razveljavitvi

 class Animal ( protected void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Izhod :

 Jaz sem pes. 

V zgornjem primeru podrazred Dog preglasi metodo displayInfo()nadrazreda Žival.

Kadarkoli pokličemo displayInfo()z uporabo d1 (objekt podrazreda), se pokliče metoda znotraj podrazreda.

Upoštevajte, da displayInfo()je označeno protectedv superrazredu za živali. Ista metoda ima publicspecifikator dostopa v podrazredu Dog. To je mogoče, ker publicomogoča večji dostop kot protected.

Prevladujoče abstraktne metode

V Javi so abstraktni razredi ustvarjeni kot nadrazred ostalih razredov. Če razred vsebuje abstraktno metodo, jo obvezno preglasite.

V naslednjih vajah bomo izvedeli več o abstraktnih razredih in preglasitvi abstraktnih metod.

Zanimive Članki...