Prevladujoč v Javi

Prevladujoč v Javi

Kadar podrazred ponuja posebno izvedbo za metodo, ki je že opredeljena v njegovem nadrejenem razredu, se imenuje metoda, ki prevladuje. Metoda preglasitve v podrazredu mora imeti istoimenske parametre in vrsto vrha kot metodo v nadrejenem razredu.

Pravila za prevlado metode

  • Parametri imena in vrsta vrnitve se morata ujemati s matično metodo.
  • Java izbere, katero metodo zagnati v času izvajanja, ki temelji na dejanski vrsti predmeta, ne le referenčne spremenljivke.
  • Statičnih metod ni mogoče preglasiti.
  • The @Preverjanje Ujame napake, kot so napake v imenih metod.
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  ();      }   }   

Izhod
Dog is running. Animal is eating. Dog is barking.  

Pojasnilo: Živalski razred določa osnovne funkcionalnosti, kot so premik () in jesti () . Pasji razred podeduje od živali in preglasi Metoda premik () za zagotavljanje določenega vedenja Pes teče. Oba razreda lahko dostopata do lastnih metod. Pri ustvarjanju psa objekta, ki kliče premik (), izvede pretirano metodo.

Metoda, ki prevladuje v Javi

Posebni primeri v prevladu

1. Klicni metodi staršev s pomočjo Super

The Super ključna beseda se lahko sklicuje na metodo starševskega razreda iz metode prevladujočega.

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  ();      }   }   

Izhod
Parent's show() Child's show()  

2.  Končnih metod ni mogoče preglasiti

Če ne želimo, da bi metoda preglasila, jo razglasimo za  finale . Prosim poglejte  Uporaba končnega z dedovanjem

Java
   class   Parent  {          // Can't be overridden      final     void     show  (){          }   }   class   Child     extends     Parent  {          // This would produce error      void     show  ()     {}   }   


Izhod :

Metodooverriding

3. Statične metode

  • Statičnih metod ni mogoče preglasiti; Določitev statične metode v podrazredu z enakim podpisom kot v superklasini skriva metodo superklasa.
  • Metode primerka je mogoče preglasiti, vendar podrazred ne more preglasiti statične metode na vrhu.
  • Statična metoda v podrazredu z enakim podpisom kot statična metoda na presežku skriva prvotno metodo.
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  ();         }   }   

Izhod
Parent static method Child instance method  

4. zasebne metode

  • Zasebne metode ni mogoče preglasiti, ker niso vidne za podrazrede.
  • Metoda podrazreda z istim imenom je obravnavana kot nova neodvisna metoda, ki ni povezana s starševskim razredom.
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  ();         }   }   

Izhod
Child method  

5. Kovariantne vrste vračanja

  • Pri metodi, ki prevladuje vrsto povratne vrste preglasitvene metode, je lahko podrazred vrnitvene vrste preglašene metode.
  • Ta funkcija je znana kot kovariantna vrsta vračanja in omogoča bolj specifične vrste vračanja v podrazredu.
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  ();             }   }   

Izhod
Child object  

Upravljanje izjem v prevladujoči

  • Prevladujoča metoda ne more vrgel novih ali širših preverjenih izjem od metode v superklasi.
  • Lahko vrže manj ali ožje preverjene izjeme.
  • Ne glede na metodo superklasa lahko vrže vse nenadzorovane izjeme (na primer RuntimeException).
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  ());      }      }   }   

Izhod
Child method  

Zakaj uporabljamo metodo, ki prevladuje?

  • Spremeniti ali izboljšati vedenje obstoječe metode v podrazredu.
  • Za doseganje polimorfizma izvajanja - Klici metode so odvisni od dejanske vrste predmeta.
  • Za ponovno uporabo imen metod logično zmanjšuje odvečnost.

Primer iz resničnega življenja: Sistem upravljanja zaposlenih

Razumemo, da prevladujemo z analogijo v resničnem svetu.

Predstavljajte si sistem upravljanja zaposlenih v organizaciji. Vsi zaposleni delijo nekaj vedenj, kot je dvigAlary () in promovira (), vendar se logika razlikuje za različne vloge, kot sta vodja ali inženir. Ustvarimo lahko en sam niz zaposlenih, kjer so posamezni zaposleni različnih vrst (prodajna tehnologija itd.), In pokličejo njihove funkcije. To veliko poenostavi celotno kodo.

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  ();      }      }   }   

Izhod
--- Raising Salaries --- Manager salary raised with incentives. Engineer salary raised with bonus. --- Promotions --- Manager promoted to Senior Manager. Engineer promoted to Senior Engineer.  

Pojasnilo: Čeprav se tako vodja kot inženirski predmeti sklicujejo na uporabo Java tipa zaposlenega, pokličejo preglašene metode dejanskih predmetov med izvajanjem, ki prikazuje dinamično odpremo dinamične metode (polimorfizem izvajanja).

Povezani članek: Preobremenitev metode in preglasitev metod