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 @Override
merkinnän käyttö esimerkissämme. Java-ohjelmassa merkinnät ovat metatietoja, joita käytimme toimittamaan tietoja kääntäjälle. Tässä @Override
merkintä 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
final
jastatic
. - 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ä super
avainsanaa.
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 public
tai 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 protected
eläinten superluokassa. Samalla menetelmällä on public
pääsyn määrittelijä Koiran alaluokassa. Tämä on mahdollista, koska se public
tarjoaa 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.