Úvod do převažujících OOP

Při implementaci konceptu dědičnosti v oops jsou všechny funkce v nadřazené třídě využívány všemi odvozenými třídami. Ale v případě, že jedna odvozená třída chce konkrétní implementaci funkce, která byla deklarována v nadřazené třídě, ale používá stejný název, stejný podpis a stejný návratový typ, pak se použije převažující funkce. Přepisování umožňuje podřízené třídě znovu definovat funkci, která již byla definována v nadřazené třídě nebo nadřazené třídě. Tímto způsobem lze při volbě metody použít obě definice zadáním objektu třídy. Například, nechť existuje funkce sum v rodičovské i podřízené třídě a při volání funkce používáme objekt podřízené třídy, bude volána metoda přítomná v podřízené třídě a místo toho, pokud používáte objekt nadřazené třídy, pak je přítomná metoda v nadřazené třídě bude volána. tato metoda v podřízené třídě má přednost před metodou přítomnou v jejích nadtriedách.

Potřeba převodu metody

Níže jsou uvedeny metody Overriding:

  • Runtime polymorfismus metoda potlačení pomáhá dosáhnout runtime polymorfismu v objektově orientovaných programovacích jazycích jako c ++, java, c #, atd.
  • Polymorfismus znamená mít mnoho forem, tj. Jeden podpis a více definic. v objektově orientovaných jazycích, když odvozená i nadřazená třída mají stejné jméno a podpis funkce, pak v případě jednorázového překladače vyřeší definici, že je třeba volat. Runtime polymorfismus znamená navázání definice metody na volanou metodu, která se objevuje za běhu programu. Umožňuje implementovat aspekt „polymorfismu s více definicemi jednoho podpisu“. Tato funkce používá dynamické odesílání metod, které má výkonný koncept objektově orientovaného designu, který přináší opětovné použití kódu a robustnost. Přepsání metody nám umožňuje volání metody do kterékoli z odvozených tříd, aniž bychom znali typ objektu odvozené třídy.
  • Pomocí této funkce lze implementovat specializovanou definici na obecnou funkci, která byla zděděna z její nadřazené třídy.

Jak Overriding funguje v OOP?

Níže uvedené vysvětlení říká, jak převažující práce:

  • OOPs, pomozte nám implementovat runtime polymorfismus a zdědit funkce třídy do jiného. Pojďme se podívat na práci převažující v OOP. Později předpokládejme, že máme superclass name animal, které má dvě funkce mluvit a jíst. Existují dvě podtřídy kočka a pes, která rozšiřuje název superclass animal.
  • Tyto dvě podtřídy používají stejné funkce mluvit a jíst, ale mění implementaci, ale zachovávají stejný podpis metod. Nyní v naší hlavní metodě, pokud voláte tyto funkce výběrem referenční proměnné, pak se za běhu rozhodne pouze to, kterou funkci je třeba zavolat. Například pokud objekt drží rozdíl podřízené třídy, která je kočka nebo pes, bude funkce příslušné třídy volána jinak, pokud objekt drží odkaz na rodičovskou třídu, bude vyvolána funkce třídy zvířat.
  • Zde bychom měli vidět, že funkce se nazývá nezávisí na typu referenční proměnné. O tom rozhoduje kompilátor za běhu, jen to pomáhá implementovat běhový polymorfismus. Pomáhá také implementovat specializovanou definici metody obecné definice metody do nadřazené třídy.

Kód:

class Animal(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Cat extends Animal(
//Overriding method
public void eat()
(
System.out.println("Cat is eating");
)
public void speak()
(
System.out.println("Cat is meowing");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
System.out.println("Dog is speaking");
)
)
public class Test(
public static void main(String() args)(
Animal an=new Dog();
Animal an1 = new Cat();
Animal an2 = new Animal();
an.speak();
an.eat();
an1.speak();
an1.eat();
an2.eat();
)
)

Výstup:

Poznámka: Referenční proměnnou podřízeného typu nelze použít k uchování odkazu na nadřazený typ.

Pravidla pro přepsání metody

Následující pravidla jsou hlavní:

Pravidlo č. 1

Seznam parametrů deklarovaných ve funkci nadřazené třídy by se měl shodovat se seznamem parametrů uvedených v definici nadřazené metody v podřízené třídě.

Například:

Metoda v nadřazené třídě

public int test1(int a);

Metoda v podřízené třídě - veřejný řetězec test1 (); // potlačení metody zde nebude podporována, protože návratový typ a argumenty jsou odlišné, ale nedojde k žádné chybě při kompilaci. Tato metoda bude považována za novou metodu podřízené třídy.

Pravidlo č. 2

Návratový typ metody přítomné v podřízené třídě musí být stejný nebo podtyp návratového typu přepsané metody.

Například:

Metoda v nadřazené třídě

public Object test1(int a);

Metoda v podřízené třídě

public String test1();

Nesprávný

Metoda v nadřazené třídě

public String test1(int a);

Metoda v podřízené třídě

public Object test1();

Pravidlo č. 3

Specifikátor přístupu přítomný v metodě nadřazené třídy musí být stejně omezující nebo více omezující než metoda, která ji v podřízené třídě potlačuje.

Nesprávný

Metoda v nadřazené třídě

public int test1(int a);

Metoda v podřízené třídě

private int test1() ; // more restrictive than public one

Pravidlo č. 4

Přepsat lze pouze metodu instance se specifikátorem přístupu jako veřejně chráněnou nebo výchozí. Je tomu tak proto, že pouze tato metoda instance může být zděděna její podtřídou a tak se říká, že je přepsána. V případě, že metoda instance zadaná v nadřazené třídě je restriktivnějším příkladem veřejné metody, nebude zděděna ve své podtřídě a provede, pokud někdo definuje stejnou metodu v podtřídě, že scénář není považován za převažující metodu, protože veřejné metody nemohou být zděděný to nemůže být potlačeno.

Například:

Metoda v nadřazené třídě

public int test1(int a); //can be inherited and overridden

Metoda v podřízené třídě

private int test1();

Nesprávný

Metoda v nadřazené třídě

private int test1(int a); //can not be inherited and overridden

Metoda v podřízené třídě

private int test1();//not overriding method of the parent class

Je považována za novou soukromou metodu podřízené třídy

Pravidlo č. 5

Super klíčové slovo lze použít k volání funkce nadřazené třídy, která byla přepsána její podtřídou.

class Animal(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
super.speak(); // Here super keyword is used to call the speak function of the super class.ieAnimal
)
)
public class Test(
public static void main(String() args)(
Animal an=new Dog();
Animal an2 = new Animal();
an.speak();
an.eat();
an2.eat();
)
)

Výstup:

Pravidlo č. 6

Konstruktor třídy nemůže být jeho podtřídami potlačen, protože konstruktor dvou tříd nemůže být stejný.

Pravidlo č. 7

Zpracování výjimek při převažování.

  • Metoda incase v nadřazené třídě nevrhá žádnou výjimku, pak je možné použít nadřazenou metodu přítomnou v podtřídě pouze zaškrtnutou výjimku. Pokud metoda overriding zobrazí zaškrtnutou výjimku, kompilátor zobrazí chybu.
  • Pokud metoda v nadřazené třídě, která je přepsána, vyvolá metodu nadřazené tandemové výjimky přítomnou v podtřídě, musí prostřednictvím výjimky stejné úrovně nebo jejího podtypu v hierarchii výjimek nebo vůbec žádné výjimky.

Pravidlo č. 8

Je také možné potlačit metodu víceúrovňového dědictví.

Kód:

class Creature (
//Overriding method
public void eat()
(
System.out.println("Creature is eating");
)
public void speak()
(
System.out.println("Creature is speaking");
)
)
class Animal extends Creature(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
System.out.println("Dog is speaking");
)
)
public class Test(public static void main(String() args)(
Creature an=new Dog();
Animal an1 = new Animal();
Animal an2 = new Dog();
an.speak();
an.eat();
an1.speak();
an1.eat();
an2.eat();
)
)

Výstup:

Pravidlo # 9

Převažující pravidla metod v Javě

  • Synchronizovaná metoda může být snadno potlačena nesynchronizovanou metodou a naopak.
  • Abstraktní metoda přítomná v abstraktních třídách nebo rozhraních má být přepsána, aby poskytla specifickou implementaci deklarovaným metodám, jinak bude ukazovat chybu kompilace.
  • Definování statické metody se stejným názvem jako statická metoda přítomná v nadřazené třídě se nazývá skrývání metody, nikoli přepisování metody, protože neimplementuje běhový polymorfismus.
  • Konečné metody nelze přepsat.

Pravidlo č. 10

Metoda přepsání v C ++

Přepisování metody v plus je dosaženo deklarací metody jako virtuální. Virtuální klíčové slovo se používá k dosažení runtime polymorfismu v jazyce c ++. Zatímco v Javě jsou všechny funkce standardně brány jako virtuální.

Pravidlo č. 11

Přepisování metody se liší od přetížení metody, protože se jedná o proces běhového polymorfismu, zatímco přetížení a metoda jsou příkladem polymorfismu kompilace. Při přepisování metody je nutné zachovat podpis metody stejně. když provedeme jakoukoli změnu v návratovém typu metody nebo seznamu parametrů, kompilátor ji považuje za přetížení metody.

Přepsání metody Metoda přetížení
class A(
public void test()(
System.out.println("In class A");
)
)
class B extends A(
public void test()(
System.out.println("In class A");
))public class Test(
public static void main(String() args)(
A a=new B();
a.test();
A b =new A();
b.test();
))
class A(
public void test()(
System.out.println("Method without arguments");
)
public void test(int x)(
System.out.println("Method with arguments");
System.out.println(x);
))public class Test(
public static void main(String() args)(
A a=new A();
a.test();
a.test(2);
)
)

Výstup:

Kdy použít metodu Overriding?

Způsoby použití funkce Overriding jsou následující:

  • OOP poskytuje úžasnou vlastnost dědičnosti, aby vytvořila velkou hierarchii mezi nadřazenou a podtřídou, od menší specializace po větší specializaci.
  • Můžeme použít nadtřídu k vytvoření rámce, který lze zdědit ve všech jejích podtřídách a podtřídách, můžeme definovat různé fungování těchto metod. Toho je dosaženo prvořadou funkcí, kde může být zajištěno specializované fungování zděděných metod inicializace podtříd.
  • Pomáhá také poskytovat rámec pro více tříd tím, že poskytuje soubor proměnných a metodu, kterou je třeba implementovat do všech jejích podtříd.

Závěr

OOP, koncepty činí kód robustním a snadno použitelným, když jsou efektivně využívány. Prvotní funkce vylepšuje použití dědičnosti k zajištění konkrétní implementace generické metody nadřazené třídy v jejích podtřídách. To používá koncept runtime polymorfismu ke spuštění správné definice metody. Dynamické odesílání metod se provádí pouze za běhu, které kontroluje odkaz na třídu, kterou objekt drží, aby zavolal metodu. Tato funkce je vedena různými pravidly a nevztahuje se na statické metody. Můžeme implementovat potlačení metod v jakémkoli objektově orientovaném jazyce a učinit náš program rychlejším a robustnějším.

Doporučené články

Toto je průvodce k Overriding in OOPs. Zde diskutujeme, jak převažující práce v OOP, kdy je použít, a 11 pravidel s kódy a výstupy. Další informace naleznete také v dalších souvisejících článcích.

  1. Převažující v PHP
  2. Přepisování v JavaScriptu
  3. Co je OOP?
  4. Přepsání metody v C #
  5. Příklady přepisování v Javě
  6. Statická metoda JavaScript Jak pracovat s příklady

Kategorie: