Condiție preliminară: Moștenirea în Python
Suprascrierea metodei este o capacitate a oricărui limbaj de programare orientat pe obiecte care permite unei subclase sau unei clase copil să ofere o implementare specifică a unei metode care este deja furnizată de una dintre superclasele sau clasele părinte ale acesteia. Când o metodă dintr-o subclasă are același nume, aceiași parametri sau semnătură și același tip de returnare (sau sub-tip) ca o metodă din super-clasa, atunci metoda din subclasă se spune că trece peste metoda din superclasa.

Versiunea unei metode care este executată va fi determinată de obiectul care este utilizat pentru a o invoca. Dacă un obiect al unei clase părinte este folosit pentru a invoca metoda, atunci versiunea din clasa părinte va fi executată, dar dacă un obiect al subclasei este folosit pentru a invoca metoda, atunci versiunea din clasa copil va fi executată. Cu alte cuvinte, tipul obiectului la care se face referire (nu tipul variabilei de referință) determină ce versiune a unei metode suprascrise va fi executată.
Exemplu:
# Python program to demonstrate> # method overriding> > > # Defining parent class> class> Parent():> > ># Constructor> >def> __init__(>self>):> >self>.value>=> 'Inside Parent'> > ># Parent's show method> >def> show(>self>):> >print>(>self>.value)> > # Defining child class> class> Child(Parent):> > ># Constructor> >def> __init__(>self>):> >self>.value>=> 'Inside Child'> > ># Child's show method> >def> show(>self>):> >print>(>self>.value)> > > # Driver's code> obj1>=> Parent()> obj2>=> Child()> > obj1.show()> obj2.show()> |
>
>
Ieșire:
Inside Parent Inside Child>
Suprascrierea metodei cu moștenire multiplă și pe mai multe niveluri
- Moștenire multiplă: Când o clasă este derivată din mai multe clase de bază, se numește moștenire multiplă.
Exemplu: Să luăm în considerare un exemplu în care dorim să înlocuim o metodă dintr-o singură clasă părinte. Mai jos este implementarea.
convenție de denumire pentru java
# Python program to demonstrate># overriding in multiple inheritance>>># Defining parent class 1>class>Parent1():>>># Parent's show method>>def>show(>self>):>>print>(>'Inside Parent1'>)>># Defining Parent class 2>class>Parent2():>>># Parent's show method>>def>display(>self>):>>print>(>'Inside Parent2'>)>>># Defining child class>class>Child(Parent1, Parent2):>>># Child's show method>>def>show(>self>):>>print>(>'Inside Child'>)>>># Driver's code>obj>=>Child()>>obj.show()>obj.display()>>
>
Ieșire:
Inside Child Inside Parent2>
Moștenirea pe mai multe niveluri: Când avem o relație între copil și nepot.Exemplu: Să luăm în considerare un exemplu în care dorim să suprascriem doar o metodă a uneia dintre clasele sale părinte. Mai jos este implementarea.
# Python program to demonstrate># overriding in multilevel inheritance>>># Python program to demonstrate># overriding in multilevel inheritance>>>class>Parent():>>># Parent's show method>>def>display(>self>):>>print>(>'Inside Parent'>)>>># Inherited or Sub class (Note Parent in bracket)>class>Child(Parent):>>># Child's show method>>def>show(>self>):>>print>(>'Inside Child'>)>># Inherited or Sub class (Note Child in bracket)>class>GrandChild(Child):>>># Child's show method>>def>show(>self>):>>print>(>'Inside GrandChild'>)>># Driver code>g>=>GrandChild()>g.show()>g.display()>>
>
Ieșire:
Inside GrandChild Inside Parent>
Apelarea metodei Parentului în cadrul metodei suprascrise
Metodele clasei părinte pot fi apelate și în cadrul metodelor suprascrise. Acest lucru poate fi realizat în general prin două moduri.
- Folosind Classname: Metodele de clasă ale părintelui pot fi apelate folosind Parent
classname.method>în cadrul metodei suprascrise.Exemplu:
caracter în int java
# Python program to demonstrate> # calling the parent's class method> # inside the overridden method> > > class> Parent():> > >def> show(>self>):> >print>(>'Inside Parent'>)> > class> Child(Parent):> > >def> show(>self>):> > ># Calling the parent's class> ># method> >Parent.show(>self>)> >print>(>'Inside Child'>)> > # Driver's code> obj>=> Child()> obj.show()> |
>
>
Ieșire:
Inside Parent Inside Child>Folosind Super(): Python
super()>funcția ne oferă posibilitatea de a ne referi în mod explicit la clasa părinte. Este practic util acolo unde trebuie să apelăm funcții de superclasă. Returnează obiectul proxy care ne permite să referim clasa părinte prin „super”.Exemplul 1:
# Python program to demonstrate> # calling the parent's class method> # inside the overridden method using> # super()> > > class> Parent():> > >def> show(>self>):> >print>(>'Inside Parent'>)> > class> Child(Parent):> > >def> show(>self>):> > ># Calling the parent's class> ># method> >super>().show()> >print>(>'Inside Child'>)> > # Driver's code> obj>=> Child()> obj.show()> |
șir comparabil în java
>
>
Ieșire:
Inside Parent Inside Child>
Exemplul 2:
# Program to define the use of super()> # function in multiple inheritance> class> GFG1:> >def> __init__(>self>):> >print>(>'HEY !!!!!! GfG I am initialised(Class GEG1)'>)> > >def> sub_GFG(>self>, b):> >print>(>'Printing from class GFG1:'>, b)> > # class GFG2 inherits the GFG1> class> GFG2(GFG1):> >def> __init__(>self>):> >print>(>'HEY !!!!!! GfG I am initialised(Class GEG2)'>)> >super>().__init__()> > >def> sub_GFG(>self>, b):> >print>(>'Printing from class GFG2:'>, b)> >super>().sub_GFG(b>+> 1>)> > # class GFG3 inherits the GFG1 ang GFG2 both> class> GFG3(GFG2):> >def> __init__(>self>):> >print>(>'HEY !!!!!! GfG I am initialised(Class GEG3)'>)> >super>().__init__()> > >def> sub_GFG(>self>, b):> >print>(>'Printing from class GFG3:'>, b)> >super>().sub_GFG(b>+> 1>)> > > # main function> if> __name__>=>=> '__main__'>:> > ># created the object gfg> >gfg>=> GFG3()> > ># calling the function sub_GFG3() from class GHG3> ># which inherits both GFG1 and GFG2 classes> >gfg.sub_GFG(>10>)> |
>
>
Ieșire:
HEY !!!!!! GfG I am initialised(Class GEG3) HEY !!!!!! GfG I am initialised(Class GEG2) HEY !!!!!! GfG I am initialised(Class GEG1) Printing from class GFG3: 10 Printing from class GFG2: 11 Printing from class GFG1: 12>