Anularea metodei

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 12 noiembrie 2014; verificările necesită 17 modificări .

Suprascrierea  metodei în programarea orientată pe obiect este una dintre caracteristicile unui limbaj de programare care permite unei subclase sau clase copil să ofere o implementare specifică a unei metode deja implementate într-una dintre superclase sau clasele părinte. Implementarea unei metode într-o subclasă suprascrie (înlocuiește) implementarea acesteia în superclasă, descriind o metodă cu același nume ca metoda superclasei, iar noua metodă subclasă trebuie să aibă aceiași parametri sau semnătură, tip returnat ca metoda clasei părinte. [1] . Versiunea metodei care va fi executată este determinată de obiectul folosit pentru a o apela. Dacă metoda este apelată dintr-un obiect al clasei părinte, atunci versiunea metodei clasei părinte este executată, dacă obiectul subclasei apelează metoda, atunci versiunea clasei fii [2] este executată . Unele limbaje de programare permit programatorului să protejeze metodele împotriva suprascrierii.

Exemple

Java

În limbajul de programare Java , atunci când o subclasă conține o metodă care suprascrie o metodă superclasă, poate apela metoda superclasă în plus față de propria sa metodă folosind cuvântul cheie super [2] . Exemplu:

public class Thought { public void message () { System . afară . println ( "Ma simt ca o libelula intr-un univers paralel." ); } } Public class Advice extinde Gând { @Override // Adnotarea Java 5 @Override este opțională, dar foarte utilă public void message () { System . afară . println ( "Atenție: Datele calendaristice sunt mai aproape decât par!" ); } }

Clasa Thoughteste o superclasă și oferă un apel de metodă message(). Subclasa, numită Advice, moștenește fiecare metodă a clasei Thought. Cu toate acestea, clasa Advicesuprascrie metoda message(), suprascriind funcționalitatea descrisă în clasa Thought.

Gând t1 = nul ; t1 = Gând nou (); t1 . mesaj (); // Prints „Mă simt ca o libelulă într-un univers paralel”. t1 = newAdvice ( ); // Polimorfism t1 . mesaj (); // Afișează „Avertisment: Datele calendarului sunt mai aproape decât apar.”

Cuvântul supereste folosit pentru a apela versiunea superclasă a metodei din subclasă. De exemplu, următoarele afișează ambele mesaje când este apelată o metodă de subclasă:

Public class Advice extinde Gând { @Override public void message () { System . afară . println ( "Avertisment: Datele calendaristice sunt mai apropiate decât apar." ); super . mesaj (); // Apelați versiunea clasei părinte a metodei } }

Nu este posibil ca o clasă declarată ca finalsă devină o superclasă [3] .

C++

Limbajul C++ nu are cuvântul cheie pe supercare subclasele din Java îl folosesc pentru a apela versiunea superclasă a unei metode în loc de cea suprascrisă. În schimb, operatorul domeniu este utilizat înaintea numelui clasei de bază sau părinte . De exemplu, următorul cod operează pe două clase : o clasă de bază Rectangleși o clasă derivată Box. Boxva suprascrie metoda print()clasei Rectangleastfel încât să-și imprime înălțimea. [patru]

clasa dreptunghi { public : virtual void print () const ; privat : lungime dubla ; lățime dublă ; }; void Rectangle::print () // metoda de bază print() { cout << "Lungime = " << lungime << "; Lățime = " << lățime ; } Class Box : public Rectangle { public : void print () const ; privat : inaltime dubla ; }; void Box::print () // clasa derivată prin metoda print() { Dreptunghi :: print (); // apelarea metodei părinte print() cout << "; Înălțime = " << înălțime ; }

O metodă print()dintr-o clasă Boxeste apelată de versiunea părinte a metodei print(), care este, de asemenea, capabilă să deducă valoarea variabilelor length private și widtha clasei de bază. În alte cazuri, aceste variabile nu sunt disponibile pentru Box.

Următoarele instrucțiuni creează obiecte de tip Rectangleși Boxîși numesc metodele în consecință print():

Dreptunghi myRectangle ( 5.0 , 3.0 ); myDrectangle . imprimare (); // iesiri: // Lungime = 5,0; Latime = 3,0 Box myBox ( 6.0 , 5.0 , 4.0 ); myBox . imprimare (); // iesiri: // Lungime = 6,0; latime=5,0; Înălțime = 4,0

Note

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

Literatură

  • Deitel, H. M & Deitel, PJ (2001). Cum se programează Java (ed. a 4-a). Upper Saddle River, NJ: Prentice Hall.
  • Lewis, J. și Loftus, W. (2008). Java: Soluții software (ed. a 6-a). Boston, MA: Pearson Addison Wesley.
  • Malik, D. S. (2006). Programare C++: Proiectarea programului, inclusiv structura datelor. (ed. a 3-a). Washington, DC: Tehnologia cursurilor.
  • Flanagan, David (2002). Java pe scurt .

Vezi și

Link -uri