Menetelmän ohittaminen

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 12. marraskuuta 2014 tarkistetusta versiosta . tarkastukset vaativat 17 muokkausta .

Metodin ohittaminen  olioohjelmoinnissa on yksi ohjelmointikielen ominaisuuksista , jonka avulla aliluokka tai alaluokka voi tarjota tietyn toteutuksen menetelmälle , joka on jo toteutettu jossakin yliluokista tai yläluokista. Metodin toteutus alaluokassa ohittaa (korvaa) sen toteutuksen superluokassa, kuvaamalla menetelmän, jolla on sama nimi kuin superluokkamenetelmällä, ja uudella alaluokkametodilla tulee olla samat parametrit tai allekirjoitus, palautustyyppi kuin emoluokan menetelmällä . [1] . Suoritettavan menetelmän versio määräytyy sen kutsumiseen käytetyn objektin mukaan. Jos menetelmää kutsutaan emoluokan objektista, suoritetaan emoluokan menetelmän versio, jos aliluokan objekti kutsuu metodia, suoritetaan aliluokan [2] versio . Jotkut ohjelmointikielet antavat ohjelmoijalle mahdollisuuden suojata menetelmiä ohitukselta.

Esimerkkejä

Java

Java - ohjelmointikielessä , kun aliluokka sisältää menetelmän, joka ohittaa superluokkametodin, se voi kutsua superluokkametodia oman menetelmänsä lisäksi avainsanalla super [2] . Esimerkki:

public class Ajatus { public void message () { System . ulos . println ( "Tunnen olevani sudenkorento rinnakkaisuniversumissa." ); } } public class Neuvonta laajentaa ajatusta { @Override // Java 5 @Override -merkintä on valinnainen, mutta erittäin hyödyllinen public void -viesti () { System . ulos . println ( "Varoitus: Kalenterin päivämäärät ovat lähempänä kuin miltä ne näyttävät!" ); } }

Luokka Thoughton superluokka ja tarjoaa menetelmäkutsun message(). Alaluokka, nimeltään Advice, perii jokaisen luokan metodin Thought. Luokka kuitenkin Adviceohittaa menetelmän message()ja ohittaa luokassa kuvatut toiminnot Thought.

Ajatus t1 = nolla ; t1 = uusi ajatus (); t1 . viesti (); // Tulostaa "Tunnen olevani sudenkorento rinnakkaisuniversumissa." t1 = uusi neuvo ( ); // Polymorfismi t1 . viesti (); // Tulostaa "Varoitus: Kalenterin päivämäärät ovat lähempänä kuin ne näyttävät."

Sanaa superkäytetään kutsumaan menetelmän superluokkaversiota alaluokasta. Esimerkiksi seuraava tulostaa molemmat viestit, kun aliluokkamenetelmää kutsutaan:

public class Neuvo laajentaa ajatusta { @Override public void message () { System . ulos . println ( "Varoitus: Kalenterin päivämäärät ovat lähempänä kuin ne näyttävät." ); super . viesti (); // Kutsu menetelmän yläluokan versiota } }

Ei ole mahdollista, että luokka, joka on julistettu olevan finalsuperluokka [3] .

C++

C++-kielestä puuttuu avainsana super, jota Java-aliluokat käyttävät kutsuakseen menetelmän superluokkaversiota ohitetun sijaan. Sen sijaan laajuusoperaattoria käytetään ennen emo- tai perusluokan nimeä . Esimerkiksi seuraava koodi toimii kahdessa luokassa : perusluokka Rectangleja johdettu luokka Box. Boxohittaa print()luokkamenetelmän Rectangleniin, että se tulostaa sen korkeuden. [neljä]

luokan suorakulmio { julkinen : virtuaalinen void print () const ; yksityinen : kaksinkertainen pituus ; kaksinkertainen leveys ; }; void Suorakulmio::print () // perusluokka print() -metodi { cout << "Pituus = " << pituus << "; Leveys = " << leveys ; } luokka Laatikko : julkinen suorakulmio { julkinen : void print () const ; yksityinen : kaksinkertainen korkeus ; }; void Box::print () // johdettu luokka print() -metodi { Suorakulmio :: tulosta (); // päämenetelmän kutsuminen print() cout << "; Height= " << korkeus ; }

print()Luokan menetelmää Boxkutsuu menetelmän pääversio print(), joka pystyy myös päättelemään yksityisten muuttujien length arvon ja widthperusluokan. Muissa tapauksissa nämä muuttujat eivät ole käytettävissä Box.

Seuraavat käskyt luovat tyyppisiä objekteja Rectangleja Boxkutsuvat niiden menetelmiä sen mukaisesti print():

Suorakulmio myRectangle ( 5.0 , 3.0 ); myRectangle . tulostaa (); // ulostulot: // Pituus = 5.0; Leveys = 3,0 Box myBox ( 6.0 , 5.0 , 4.0 ); myBox . tulostaa (); // ulostulot: // pituus = 6.0; leveys = 5,0; Korkeus = 4,0

Muistiinpanot

  1. Flanagan 2002, s. 107
  2. 1 2 Lewis & Loftus 2006, s. 454
  3. Deitel & Deitel 2001, s. 474
  4. Malik 2006, s. 676

Kirjallisuus

  • Deitel, H. M. & Deitel, PJ (2001). Java Ohjelmointi (4. painos). Upper Saddle River, NJ: Prentice Hall.
  • Lewis, J. & Loftus, W. (2008). Java: Software Solutions (6. painos). Boston, MA: Pearson Addison Wesley.
  • Malik, D. S. (2006). C++-ohjelmointi: Ohjelmasuunnittelu Sisältää tietorakenteen. (3. painos). Washington, DC: Kurssitekniikka.
  • Flanagan, David (2002). Java pähkinänkuoressa .

Katso myös

Linkit