Metode tilsidesætter

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 12. november 2014; checks kræver 17 redigeringer .

Metodetilsidesættelse i objektorienteret programmering er en  af ​​funktionerne i et programmeringssprog, der tillader en underklasse eller underklasse at give en specifik implementering af en metode, der allerede er implementeret i en af ​​superklasserne eller overordnede klasser. Implementeringen af ​​en metode i en underklasse tilsidesætter (erstatter) dens implementering i superklassen og beskriver en metode med samme navn som superklassemetoden, og den nye underklassemetode skal have samme parametre eller signatur, returtype som den overordnede klassemetode [1] . Den version af metoden, der vil blive udført, bestemmes af det objekt , der bruges til at kalde den. Hvis metoden kaldes fra et objekt af den overordnede klasse, så udføres versionen af ​​den overordnede klasses metode, hvis objektet i underklassen kalder metoden, så udføres versionen af ​​den underordnede klasse [2] . Nogle programmeringssprog giver programmøren mulighed for at beskytte metoder mod at blive tilsidesat.

Eksempler

Java

I programmeringssproget Java , når en underklasse indeholder en metode, der tilsidesætter en superklassemetode, kan den kalde superklassemetoden ud over sin egen metode ved hjælp af nøgleordet super [2] . Eksempel:

public class Thought { public void message () { System . ud . println ( "Jeg føler mig som en guldsmede i et parallelt univers." ); } } public class Advice extends Thought { @Override // Java 5 @Override-annotationen er valgfri, men meget nyttig public void message () { System . ud . println ( "Advarsel: Kalenderdatoer er tættere på, end de ser ud til!" ); } }

Klassen Thoughter en superklasse og giver et metodekald message(). Underklassen, kaldet Advice, arver hver metode i klassen Thought. Klassen Advicetilsidesætter dog metoden message()og tilsidesætter funktionaliteten beskrevet i klassen Thought.

Tænkte t1 = null ; t1 = ny tanke (); t1 . besked (); // Udskrifter "Jeg føler mig som en guldsmede i et parallelt univers." t1 = newAdvice ( ); // Polymorfi t1 . besked (); // Udskriver "Advarsel: Kalenderdatoer er tættere på, end de ser ud."

Ordet superbruges til at kalde superklasseversionen af ​​metoden fra underklassen. For eksempel udsender følgende begge meddelelser, når en underklassemetode kaldes:

public class Advice extends Thought { @Override public void message () { System . ud . println ( "Advarsel: Kalenderdatoer er tættere på, end de ser ud." ); super . besked (); // Kald den overordnede klasseversion af metoden } }

Det er ikke muligt for en klasse, der er erklæret finalat blive en superklasse [3] .

C++

C++-sproget mangler nøgleordet super, som underklasser i Java bruger til at kalde superklasseversionen af ​​en metode i stedet for den tilsidesatte. I stedet bruges omfangsoperatoren før det overordnede eller basisklassenavn . For eksempel fungerer følgende kode på to klasser : en basisklasse Rectangleog en afledt klasse Box. Boxvil tilsidesætte print()klassemetoden , Rectangleså den udskriver dens højde. [fire]

klasse rektangel { public : virtual void print () const ; privat : dobbelt længde ; dobbelt- bredde ; }; void Rectangle::print () // basisklasse print() metode { cout << "Længde = " << længde << "; Bredde = " << bredde ; } klasse Box : offentlig rektangel { offentligt : void print () const ; privat : dobbelt højde ; }; void Box::print () // afledt klasse print() metode { Rektangel :: print (); // kalder den overordnede metode print() cout << "; Height= " << height ; }

En metode print()i en klasse Boxkaldes af den overordnede version af metoden print(), som også er i stand til at udlede værdien af ​​private variabler length og widthbasisklassen. I andre tilfælde er disse variabler ikke tilgængelige for Box.

Følgende udsagn opretter objekter af typen Rectangleog Boxkalder deres metoder i overensstemmelse hermed print():

Rektangel myRektangel ( 5.0 , 3.0 ); mitRektangel . print (); // output: // Længde = 5,0; Bredde = 3,0 Box myBox ( 6.0 , 5.0 , 4.0 ); minBox . print (); // output: // Længde = 6,0; bredde=5,0; Højde = 4,0

Noter

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

Litteratur

  • Deitel, H. M & Deitel, PJ (2001). Java, hvordan man programmerer (4. udgave). Upper Saddle River, NJ: Prentice Hall.
  • Lewis, J. & Loftus, W. (2008). Java: Softwareløsninger (6. udgave). Boston, MA: Pearson Addison Wesley.
  • Malik, D.S. (2006). C++-programmering: Programdesign inklusive datastruktur. (3. udgave). Washington, DC: Kursusteknologi.
  • Flanagan, David. (2002). Java i en nøddeskal .

Se også

Links