Java-menetelmän ohittaminen

Tässä opetusohjelmassa opitaan Java-menetelmien ohittamisesta esimerkkien avulla.

Viimeisessä opetusohjelmassa opimme perinnöstä. Perintö on OOP-ominaisuus, jonka avulla voimme johtaa uuden luokan (aliluokan) olemassa olevasta luokasta (superluokka). Alaluokka perii yliluokan ominaisuudet ja menetelmät.

Jos nyt sama menetelmä on määritelty sekä yliluokassa että alaluokassa, aliluokan menetelmä ohittaa yliluokan menetelmän. Tätä kutsutaan menetelmän ohittamiseksi.

Esimerkki 1: Menetelmän ohittaminen

 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(); ) ) 

Tuotos :

 Olen koira. 

Edellä olevassa ohjelmassa displayInfo()menetelmä on läsnä sekä eläinten superluokassa että koiran alaluokassa.

Kun kutsumme displayInfo()d1-objektia (alaluokan objekti), kutsutaan aliluokan Koira-menetelmä. displayInfo()Menetelmä alaluokan ohittaa saman menetelmän yläluokaksi.

Huomaa @Overridemerkinnän käyttö esimerkissämme. Java-ohjelmassa merkinnät ovat metatietoja, joita käytimme toimittamaan tietoja kääntäjälle. Tässä @Overridemerkintä määrittää kääntäjän, että tämän merkinnän jälkeinen menetelmä ohittaa yliluokan menetelmän.

Ei ole pakollista käyttää @Override. Kuitenkin, kun käytämme tätä, menetelmän tulisi noudattaa kaikkia ohittamisen sääntöjä. Muuten kääntäjä luo virheen.

Java-ohittavat säännöt

  • Sekä yliluokalla että alaluokalla on oltava sama metodin nimi, sama palautustyyppi ja sama parametriluettelo.
  • Emme voi ohittaa tapana finalja static.
  • Meidän tulisi aina ohittaa superluokan abstraktit menetelmät (keskustellaan myöhemmissä opetusohjelmissa).

superavainsana Java-ohituksessa

Yleinen kysymys, joka syntyy suoritettaessa ohitusta Javassa, on:

Voimmeko käyttää yliluokan menetelmää ohitettuamme?

No, vastaus on kyllä . Pääset yliluokan menetelmään alaluokasta käyttämällä superavainsanaa.

Esimerkki 2: Super-avainsanan käyttö

 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(); ) ) 

Tuotos :

Olen eläin. Olen koira.

Yllä olevassa esimerkissä alaluokka Koira ohittaa displayInfo()eläinluokan menetelmän .

Kun kutsutaan menetelmää displayInfo()käyttämällä koiran alaluokan d1-objektia, kutsutaan menetelmää koiran alaluokan sisällä; menetelmää yliluokan sisällä ei kutsuta.

displayInfo()Koiran alaluokan sisällä olemme tottuneet super.displayInfo()kutsumaan displayInfo()yliluokkaa.

On tärkeää huomata, että Java-rakentajia ei peritä. Näin ollen Java-sovelluksessa ei ole olemassa konstruktorin ohittamista.

Voimme kuitenkin kutsua yliluokan rakentajaa sen alaluokista. Tätä varten käytämme super(). Lisätietoja on Java super -avainsanalla.

Menetelmän ohittamisen käyttötiedot

Samalla superluokassa ja sen alaluokissa ilmoitetulla menetelmällä voi olla erilaiset pääsyn määrittelijät. On kuitenkin olemassa rajoitus.

Voimme käyttää vain niitä alaluokkien käyttöoikeuksien määrittelijöitä, jotka tarjoavat suuremman pääsyn kuin yliluokan pääsyn määrittelijä. Esimerkiksi,

Oletetaan, että menetelmä myClass()yliluokassa ilmoitetaan protected. Sitten sama menetelmä myClass()alaluokassa voi olla joko publictai protected, mutta ei private.

Esimerkki 3: Pääsyn määrittelijä ohituksessa

 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(); ) ) 

Tuotos :

 Olen koira. 

Yllä olevassa esimerkissä alaluokka Koira ohittaa displayInfo()eläinluokan menetelmän .

Aina kun soitamme displayInfo()d1: llä (alaluokan kohde), kutsutaan alaluokan sisäistä menetelmää.

Huomaa, että displayInfo()se ilmoitetaan protectedeläinten superluokassa. Samalla menetelmällä on publicpääsyn määrittelijä Koiran alaluokassa. Tämä on mahdollista, koska se publictarjoaa suuremman pääsyn kuin protected.

Abstraktit menetelmät

Java-sovelluksessa abstraktit luokat luodaan muiden luokkien superluokiksi. Ja jos luokka sisältää abstraktin menetelmän, se on pakollinen ohittamaan.

Opimme lisää abstrakteista luokista ja abstraktien menetelmien ohittamisesta myöhemmissä opetusohjelmissa.

Mielenkiintoisia artikkeleita...