logo

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.
Java
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.



A Java -ban történő felülbírálás módszere' title=

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 :



Módszerképződés' loading='lazy' title=

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.
Java
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.
Java
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é.
Java
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.
Java
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