Java -ban felülmúló

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

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

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