Bevezetés az OOP felülbírálásáról
Az öröklési koncepció oops-ben történő végrehajtása során az összes szülőosztály összes funkcióját az annak származtatott osztályai használják. De abban az esetben, ha egy származtatott osztály a szülőosztályban deklarált funkció speciális megvalósítását akarja, de ugyanazt a nevet, ugyanazt az aláírást és ugyanazt a visszatérési típust használja, akkor az elsőbbségi funkciót kell használni. A felülbírálás lehetővé teszi a gyermekosztály számára, hogy újradefiniálja a szülői osztályban vagy a szuperosztályban már meghatározott funkciót. Ilyen módon mindkét meghatározást felhasználhatjuk, ha meghatározzuk az osztály tárgyát, miközben meghívjuk a metódust. Például, létezzen egy összegfüggvény mind a szülő, mind a gyermek osztályban, és míg a függvény meghívásakor a gyermek osztály tárgyát használjuk, akkor a gyermek osztályban lévõ módszert hívjuk meg, és ha ehelyett szülõ osztályt használunk, akkor a jelenlegi módszer a szülő osztályban hívják. ez a módszer a gyermekosztályban állítólag felülírja a szuperosztályaiban alkalmazott módszert.
A módszer felülbírálása
Az alábbiakban bemutatjuk a felülbírálás módszereit:
- A futásidejű polimorfizmus módszer felülbírálása elősegíti a futásidejű polimorfizmus elérését objektum-orientált programozási nyelveken, például c ++, java, c #, stb.
- A polimorfizmus sokféle formát jelent, azaz egy aláírást és több definíciót. objektum-orientált nyelveken, amikor mind a származtatott, mind a szülő osztálynak azonos a neve és a függvény aláírása, akkor egyszerre a fordító feloldja a meghatározást, meg kell hívnia. A futásidejű polimorfizmus azt jelenti, hogy a metódusdefiníciónak az úgynevezett módszerhez történő kötődése a program futási idején történik. Ez lehetővé teszi a polimorfizmus „egy aláírás több meghatározása” aspektusának megvalósítását. Ez a szolgáltatás dinamikus módszer-disztribúciót használ, amelynek az objektum-orientált tervezés erőteljes koncepciója a kód újbóli felhasználása és robusztussága. Egy módszer felülbírálása lehetővé teszi a metódushívást bármely származtatott osztályba anélkül, hogy tudnánk a származtatott osztály objektumtípusát.
- Ezzel a funkcióval speciális meghatározást lehet végrehajtani a szuperosztálytól örökölt általános funkcióhoz.
Hogyan működik az felülbírálás az OOP-kban?
Az alábbi magyarázat azt mondja, hogy az elsőbbség hogyan működik:
- OOP, segítsen bennünket a futásidejű polimorfizmus megvalósításában, miközben az osztály jellemzőit egy másikba örökli. Vessen egy pillantást az OOP-ok felülbírálásának működésére. Később tegyük fel, hogy van egy szuperosztályú állatunk, amelynek két funkciója van: beszélni és enni. Két alosztály létezik: macska és kutya, amely kiterjeszti az állat szuperosztály nevét.
- Ez a két alosztály ugyanazokat a funkciókat használja, amelyek beszélnek és esznek, de megváltoztatják a megvalósítást, ugyanakkor megőrzik a módszerek aláírását. Most a fő módszerünkben, ha ezeket a függvényeket a referenciaváltozó kiválasztásával hívja meg, akkor csak futásidejűekben eldönti, hogy melyik funkciót kell hívnia. Például, ha az objektum rendelkezik a gyermekosztály különbségével, amely macska vagy kutya, akkor az adott osztály funkcióját másképp nevezzük, ha az objektum a szülőosztály referenciáját tartalmazza, akkor az állatosztály funkcióját hívjuk meg.
- Itt látnunk kell, hogy a függvény meghívása nem függ a referenciaváltozó típusától. Ezt a fordító csak futásidejűleg határozza meg, ez segít a futásidejű polimorfizmus megvalósításában. Elősegíti a módszer általános meghatározásának módszerének speciális meghatározását is a szülőosztályban.
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();
)
)
Kimenet:
Megjegyzés: A gyermektípus referenciaváltozója nem használható a szülőtípusra történő hivatkozás tartására.
A módszer felülbírálásának szabályai
Az alábbiakban bemutatjuk a felülírási szabályokat:
1. szabály
A szülőosztály függvényében deklarált paraméterek listájának meg kell egyeznie a gyermekosztályban alkalmazott felülíró módszer meghatározásában említett paraméterek listájával.
Például:
A módszer a szülőosztályban
public int test1(int a);
Gyerekosztályban alkalmazott módszer - nyilvános karakterlánc teszt1 (); // a módszer felülbírálása itt nem támogatott, mivel a visszatérés típusa és az argumentumok különböznek, de fordítási időbeli hiba nem jelentkezik. Ezt a módszert a gyermek osztály új módszerének tekintik.
2. szabály
A gyermekosztályban alkalmazott módszer visszatérési típusának meg kell egyeznie vagy felül kell vizsgálnia a módszer visszatérítési típusának altípusát.
Például:
A módszer egy szülői osztályban
public Object test1(int a);
A módszer a gyermek osztályban
public String test1();
Helytelen
A módszer a szülőosztályban
public String test1(int a);
A módszer a gyermek osztályban
public Object test1();
3. szabály
A szülőosztály módszerében jelenlévő hozzáférés-meghatározónak ugyanolyan korlátozónak vagy korlátozóbbnak kell lennie, mint annak a módszernek, amely felülbírálja azt a gyermekosztályban.
Helytelen
A módszer a szülőosztályban
public int test1(int a);
Módszer a gyermek osztályban
private int test1() ; // more restrictive than public one
4. szabály
Csak a nyilvános vagy alapértelmezett hozzáférés-specifikátorral rendelkező példány módszer felülbírálható. Ennek oka az, hogy csak ez a példány módszer örökölhető az alosztályán, és így azt állíthatják, hogy felülbírálják. Abban az esetben, ha a szülőosztályban megadott példány módszer szigorúbb példa a nyilvános módszer, akkor nem örökli az alosztályában, és ha valaki ugyanazt a módszert határozza meg egy alosztályban, akkor a forgatókönyvet nem tekintik felülíró módszernek, mivel a nyilvános módszerek nem örökölhető, ezt nem szabad felülbírálni.
Például:
A módszer a szülőosztályban
public int test1(int a); //can be inherited and overridden
A módszer a gyermek osztályban
private int test1();
Helytelen
A módszer a szülőosztályban
private int test1(int a); //can not be inherited and overridden
A módszer a gyermek osztályban
private int test1();//not overriding method of the parent class
A gyermekosztály új magánmódszerének tekintik
5. szabály
A szuper kulcsszó felhasználható a szülő osztály azon funkciójának meghívására, amelyet alosztálya felülbírált.
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();
)
)
Kimenet:
6. szabály
Egy osztály építőjét nem szabad felülbírálni alosztályaival, mivel két osztály építője nem lehet azonos.
# 7. Szabály
Kivételkezelés a felülbírálás során.
- A szülőosztályban az incase módszer nem hoz kivételt, akkor az alosztályban levő felülbíráló módszer csak egyetlen nem ellenőrzött kivételt vonhat maga után. Ha a felülíró módszer ellenőrzött kivételt mutat, akkor a fordító hibát mutat.
- Ha a szülőosztályban felülbírált módszer kivételes tandem felülíró módszert vet fel az alosztályban, az azonos szint vagy altípusa kivételével a kivételi hierarchiában vagy egyáltalán nem kell kivételt végrehajtani.
8. szabály
A többszintű öröklés során felülírható módszer is lehetséges.
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();
)
)
Kimenet:
9. szabály
A Java felülbíráló módszerszabályai
- A szinkronizált módszer könnyen felülbírálható egy nem szinkronizált módszerrel, és fordítva.
- Az abszolút osztályokban vagy interfészekben jelen lévő absztrakt módszert úgy kell átírni, hogy a bejelentett módszerekre specifikus megvalósítást biztosítson, különben fordítási idő hibát fog mutatni.
- A szülőosztályban szereplő statikus módszerrel azonos nevű statikus módszer meghatározása az eljárás elrejtése, nem pedig a módszer felülbírálása, mivel nem valósítja meg a futásidejű polimorfizmust.
- A végső módszereket nem szabad felülbírálni.
10. szabály
A módszer felülbírálása C ++ esetén
A c pluszban felülbíráló módszer akkor érhető el, ha egy módszert virtuálisnak nyilvánítanak. Virtuális kulcsszót használunk a c ++ futásidejű polimorfizmus elérésére. Míg a Java-ban az összes funkció alapértelmezés szerint virtuális.
11. szabály
A módszer felülírása különbözik a módszer túlterhelésétől, mivel ez a futásidejű polimorfizmus folyamata, míg a túlterhelés és a módszer a fordítási idő polimorfizmusának példája. A felülíró módszernél kötelező a módszer aláírásának azonos megtartása. Ha bármilyen változtatást végezzünk a metódus visszatérési típusában vagy a paraméterlistában, akkor a fordító azt metódustúlterhelésként kezeli.
A módszer felülbírálása | Módszer túlterhelés |
class A( | class A( |
Kimenet:
![]() | ![]() |
Mikor kell használni a felülíró módszert?
Az alábbiakban bemutatjuk a felülbírálás használatának módszereit:
- Az OOP az öröklés csodálatos tulajdonsága, hogy nagy hierarchiát alakítson ki a szuperosztály és az alosztály között, a kisebb specializációtól a nagyobb specializációig.
- Használhatjuk-e a szuperosztályt egy olyan keret létrehozásához, amely örökölhető az összes alosztályában, és az alosztályokban meghatározhatjuk-e ezen módszerek eltérő működését? Ezt olyan felülbíráló tulajdonsággal érik el, ahol speciális működés biztosítható az örökölt módszerek init alosztályai számára.
- Ez egyúttal elősegíti a több osztály számára a keret létrehozását azáltal, hogy biztosítja a változók gyűjteményét és a módszert, amelyet minden alosztályában be kell vezetni.
Következtetés
Az OOP-k, a koncepciók hatékony és hatékony felhasználást tesznek a kód robusztusá és könnyű újrafelhasználhatóvá. A felülíró szolgáltatás javítja az öröklés felhasználását, hogy biztosítsa az alosztályok szülőosztályának általános módszerének specifikus megvalósítását. Ez a futásidejű polimorfizmus koncepciót használja a módszer helyes meghatározásának kiváltására. A dinamikus módszer elküldése csak futásidejűleg történik, amely ellenőrzi annak az osztálynak a referenciáját, amelyet az objektum tart, hogy meghívja a módszert. Ez a szolgáltatás különféle szabályokon vezetett át, és nem vonatkozik statikus módszerekre. A módszer felülbírálását bármilyen objektum-orientált nyelven megvalósíthatjuk, és gyorsabbá és robusztusabbá tehetjük programunkat.
Ajánlott cikkek
Ez egy útmutató az OOP-k felülbírálására. Itt tárgyaljuk, hogy a felülbírálás hogyan működik az OOP-kban, mikor kell használni, és 11 szabály a kódokkal és a kimenettel. Megnézheti más kapcsolódó cikkeinket, hogy többet megtudjon-
- A PHP felülbírálása
- A JavaScript felülírása
- Mi az OOP?
- Módszer felülbíráló C #
- Példák a Java felülírására
- JavaScript statikus módszer | Hogyan dolgozzunk példákkal