Java -ban felülmúló
Ha egy alosztály egy speciális megvalósítást biztosít egy olyan módszerhez, amelyet a szülő osztályában már meghatároztak, akkor módszertermelést nevezzük. Az alosztályban a felülbírált módszernek azonos névparaméterekkel kell rendelkeznie, és a visszatérési típusnak kell lennie, mint a szülő osztályban.
A módszer felülbírálására vonatkozó szabályok
- A névparamétereknek és a visszatérési típusnak meg kell egyeznie a szülő módszerrel.
- Java választja, hogy melyik módszer futási idő alatt futni, a tényleges objektumtípus alapján, nem csak a referenciaváltozó típusa alapján.
- A statikus módszereket nem lehet felülbírálni.
- A @Override annotáció elkapja a hibákat, mint például a Method Neves írógépek.
class Animal { void move (){ System . out . println ( 'Animal is moving.' ); } void eat (){ System . out . println ( 'Animal is eating.' ); } } class Dog extends Animal { @Override void move (){ // move method from Base class is overriden in this // method System . out . println ( 'Dog is running.' ); } void bark (){ System . out . println ( 'Dog is barking.' ); } } public class Geeks { public static void main ( String [] args ) { Dog d = new Dog (); d . move (); d . eat (); d . bark (); } }
Kibocsátás
Dog is running. Animal is eating. Dog is barking.
Magyarázat: Az állati osztály meghatározza az alapfunkciókat, mint például mozog() és eszik() - A kutyaosztály az állatoktól és felülbírál a mozgás () módszer egy adott viselkedés biztosításához A kutya fut. Mindkét osztály elérheti saját módszereit. Kutyaobjektum -hívás -hívás () létrehozásakor végrehajtja a felülbírált módszert.
Különleges esetek a felülbíráláshoz
1.
A szuperkulcsszó Meghívhatja a szülői osztály módszerét a felülbíráló módszerből.
Java class Parent { void show (){ System . out . println ( 'Parent's show()' ); } } class Child extends Parent { @Override void show (){ super . show (); System . out . println ( 'Child's show()' ); } } public class Main { public static void main ( String [] args ){ Parent obj = new Child (); obj . show (); } }
Kibocsátás
Parent's show() Child's show()
2. A végleges módszereket nem lehet felülbírálni
Ha nem akarjuk, hogy egy módszer felülbírálódjon, akkor azt kijelenti, hogy végső - Kérjük, olvassa el A végső felhasználás örökséggel -
Java class Parent { // Can't be overridden final void show (){ } } class Child extends Parent { // This would produce error void show () {} }
Kibocsátás :
3. Statikus módszerek
- A statikus módszereket nem lehet felülbírálni; A statikus módszer meghatározása olyan alosztályban, amelynek ugyanolyan aláírása van, mint a szuperosztályban, elrejti a szuperosztály módszerét.
- A példány módszereket felülbírálhatjuk, de az alosztály nem tudja felülbírálni a szuperosztály statikus módszerét.
- Egy statikus módszer egy alosztályban, ugyanolyan aláírással, mint a szuperosztályú statikus módszer, elrejti az eredeti módszert.
class Parent { static void staticMethod (){ System . out . println ( 'Parent static method' ); } void instanceMethod (){ System . out . println ( 'Parent instance method' ); } } class Child extends Parent { static void staticMethod (){ // Hides Parent's static method System . out . println ( 'Child static method' ); } @Override void instanceMethod (){ // Overrides Parent's instance method System . out . println ( 'Child instance method' ); } } public class GFG { public static void main ( String [] args ){ Parent p = new Child (); // Calls Parent's static method (hiding) p . staticMethod (); // Calls Child's overridden instance method p . instanceMethod (); } }
Kibocsátás
Parent static method Child instance method
4. Privát módszerek
- A privát módszereket nem lehet felülbírálni, mert nem láthatók az alosztályok számára.
- Az azonos nevű alosztály módszert új, független módszerként kezelik, amely nem kapcsolódik a szülői osztályhoz.
class Parent { private void display (){ System . out . println ( 'Parent private method' ); } } class Child extends Parent { void display (){ // This is a new method not overriding System . out . println ( 'Child method' ); } } public class GFG { public static void main ( String [] args ){ Child c = new Child (); // Calls Child's method c . display (); } }
Kibocsátás
Child method
5. Covariant visszatérési típusok
- A felülbíráló módszer visszatérési típusának felülbírálásának módszere a felülbírált módszer visszatérési típusa alosztály lehet.
- Ezt a funkciót Covariant visszatérési típusnak hívják, és az alosztályban speciálisabb visszatérési típusokat tesznek lehetővé.
class Parent { Parent getObject (){ System . out . println ( 'Parent object' ); return new Parent (); } } class Child extends Parent { @Override // Covariant return type Child getObject () { System . out . println ( 'Child object' ); return new Child (); } } public class GFG { public static void main ( String [] args ){ Parent obj = new Child (); // Calls Child's method obj . getObject (); } }
Kibocsátás
Child object
Kivételkezelés a felülbíráláskor
- A felülbíráló módszer nem dobhat új vagy szélesebb körű ellenőrzött kivételeket, mint a szuperosztályban található módszer.
- Kevesebb vagy szűkebb ellenőrzött kivételt dobhat.
- Bármilyen nem ellenőrzött kivételt (például a RuntimeException) eldobhat, a szuperosztály módszerétől függetlenül.
import java.io.IOException ; class Parent { void display () throws IOException { System . out . println ( 'Parent method' ); } } class Child extends Parent { @Override void display () throws IOException { System . out . println ( 'Child method' ); } } public class GFG { public static void main ( String [] args ){ // Parent reference Child object Parent obj = new Child (); try { // Calls Child's overridden method obj . display (); } catch ( IOException e ){ System . out . println ( 'Exception caught: ' + e . getMessage ()); } } }
Kibocsátás
Child method
Miért használunk módszert a felülbírálásra?
- Egy meglévő módszer viselkedésének megváltoztatása vagy javítása egy alosztályban.
- A futásidejű polimorfizmus elérése érdekében - A módszerhívások az aktuális objektumtípustól függnek.
- A módszer nevének újrafelhasználása logikusan csökkenti a redundanciát.
Valós élet példa: Munkavállalói menedzsment rendszer
Értsük meg, hogy egy valós analógiával felülbíráljuk.
Képzelje el a szervezet munkavállalói menedzsment rendszerét. Minden alkalmazottnak olyan viselkedése van, mint a RaiseSalary () és a Promote (), de a logika különböző szerepeknél különbözik, mint például a menedzser vagy a mérnök. Készíthetünk egyetlen munkavállalói tömböt, ahol az egyes alkalmazottak különböző típusúak (értékesítési technika stb.), És felhívhatjuk funkcióikat. Ez sokat egyszerűsíti az általános kódot.
Java abstract class Employee { abstract void raiseSalary (); abstract void promote (); } class Manager extends Employee { @Override void raiseSalary (){ System . out . println ( 'Manager salary raised with incentives.' ); } @Override void promote (){ System . out . println ( 'Manager promoted to Senior Manager.' ); } } class Engineer extends Employee { @Override void raiseSalary (){ System . out . println ( 'Engineer salary raised with bonus.' ); } @Override void promote (){ System . out . println ( 'Engineer promoted to Senior Engineer.' ); } } public class Company { public static void main ( String [] args ){ Employee [] employees = { new Manager () new Engineer () }; System . out . println ( '--- Raising Salaries ---' ); for ( Employee e : employees ){ e . raiseSalary (); } System . out . println ( 'n--- Promotions ---' ); for ( Employee e : employees ) { e . promote (); } } }
Kibocsátás
--- Raising Salaries --- Manager salary raised with incentives. Engineer salary raised with bonus. --- Promotions --- Manager promoted to Senior Manager. Engineer promoted to Senior Engineer.
Magyarázat: Bár mind a menedzser, mind a mérnöki objektumokra hivatkoznak a Java típusú alkalmazotti típusú használatra a tényleges objektumok felülbírált módszereire futási időben, bemutatva a dinamikus módszer diszpécserét (futásidejű polimorfizmus).
Kapcsolódó cikk: A módszer túlterhelése és a módszer felülbírálása