Přepsání metody

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 12. listopadu 2014; kontroly vyžadují 17 úprav .

Přepisování  metod v objektově orientovaném programování je jednou z funkcí programovacího jazyka , který umožňuje podtřídě nebo podřízené třídě poskytovat specifickou implementaci metody již implementované v jedné z nadtříd nebo nadřazených tříd. Implementace metody v podtřídě přepíše (nahradí) její implementaci v nadtřídě, popisuje metodu se stejným názvem jako metoda nadtřídy a nová metoda podtřídy musí mít stejné parametry nebo signaturu, návratový typ jako metoda nadřazené třídy [1] . Verze metody, která bude provedena, je určena objektem použitým k jejímu volání. Pokud je metoda volána z objektu nadřazené třídy, provede se verze metody nadřazené třídy, pokud metodu volá objekt podtřídy, provede se verze podřízené třídy [2] . Některé programovací jazyky umožňují programátorovi chránit metody před přepsáním.

Příklady

Java

V programovacím jazyce Java , když podtřída obsahuje metodu, která přepíše metodu nadtřídy, může kromě své vlastní metody volat metodu nadtřídy pomocí klíčového slova super [2] . Příklad:

public class Myšlenka { public void message () { System . ven . println ( "Cítím se jako vážka v paralelním vesmíru." ); } } public class Advice extends Thought { @Override // Anotace Java 5 @Override je volitelná, ale velmi užitečná public void message () { System . ven . println ( "Upozornění: Kalendářní data jsou blíže, než se zdá!" ); } }

Třída Thoughtje nadtřídou a poskytuje volání metody message(). Podtřída s názvem Advice, dědí každou metodu třídy Thought. Třída však Advicepřepíše metodu message()a přepíše funkcionalitu popsanou ve třídě Thought.

Myšlenka t1 = null ; t1 = nová myšlenka (); t1 . zpráva (); // Tiskne "Cítím se jako vážka v paralelním vesmíru." t1 = nová rada ( ); // Polymorfismus t1 . zpráva (); // Vytiskne "Upozornění: Kalendářní data jsou blíže, než se zdá."

Slovo superse používá k volání verze nadtřídy metody z podtřídy. Například následující výstup zobrazí obě zprávy, když je volána metoda podtřídy:

public class Advice extends Myšlenka { @Override public void message () { System . ven . println ( "Upozornění: Kalendářní data jsou blíže, než se zdá." ); super _ zpráva (); // Volání verze metody nadřazené třídy } }

Není možné, aby se třída deklarovaná jako finalnadtřída stala nadtřídou [3] .

C++

Jazyk C++ postrádá klíčové slovo super, které podtřídy v Javě používají k volání verze nadtřídy metody namísto přepsané. Místo toho se operátor oboru používá před nadřazenou nebo základní třídou name . Například následující kód funguje se dvěma třídami : základní třídou Rectanglea odvozenou třídou Box. Boxpřepíše metodu print()třídy Rectangletak, aby vytiskla její výšku. [čtyři]

třída Obdélník { public : virtual void print () const ; soukromý : dvojitá délka ; dvojitá šířka ; }; void Rectangle::print () // základní třída print() metoda { cout << "Délka = " << délka << "; Šířka = " << šířka ; } třída Box : veřejný obdélník { veřejnost : void tisknout () const ; soukromý : dvojitá výška ; }; void Box::print () // odvozená třída print() metoda { Obdélník :: tisk (); // volání rodičovské metody print() cout << "; Výška= " << výška ; }

Metoda print()ve třídě Boxje volána nadřazenou verzí metody print(), která je také schopna odvodit hodnotu soukromých proměnných length a widthzákladní třídy. V ostatních případech tyto proměnné nejsou dostupné pro Box.

Následující příkazy vytvářejí objekty typu Rectanglea Boxpodle toho volají jejich metody print():

Rectangle myRectangle ( 5,0 , 3,0 ); můj obdélník . tisknout (); // výstupy: // Délka = 5.0; Šířka = 3,0 Box myBox ( 6.0 , 5.0 , 4.0 ); myBox . tisknout (); // výstupy: // Délka = 6.0; šířka = 5,0; Výška = 4,0

Poznámky

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

Literatura

  • Deitel, H. M & Deitel, PJ (2001). Java Jak programovat (4. vydání). Upper Saddle River, NJ: Prentice Hall.
  • Lewis, J. & Loftus, W. (2008). Java: Softwarová řešení (6. vydání). Boston, MA: Pearson Addison Wesley.
  • Malik, D. S. (2006). Programování v C++: Návrh programu včetně datové struktury. (3. vyd.). Washington, DC: Technologie kurzu.
  • Flanagan, David (2002). Java v kostce .

Viz také

Odkazy