logo

Prevracia v Jave

Ak podtrieda poskytne špecifickú implementáciu pre metódu, ktorá je už definovaná v jej rodičovskej triede, nazýva sa metóda Prečítanie. Metóda prepísania v podtriede musí mať rovnaké parametre názvu a typ návratu ako metóda v nadradenej triede.

Pravidlá pre potlačenie metódy

  • Parametre názvu a typ návratu sa musia zhodovať s rodičovskou metódou.
  • Java vyberá, ktorá metóda na spustenie v čase spustenia na základe typu skutočného objektu nielen typu referenčnej premennej.
  • Statické metódy nemožno prepísať.
  • Ten @Override anotácia Chytá chyby, ako je preklepy v názvoch metód.
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();  } } 

Výstup
Dog is running. Animal is eating. Dog is barking. 

Vysvetlenie: Trieda zvierat definuje základné funkcie ako pohyb () a jesť () . Trieda psov zdedí zvieratá a prepisovať Metóda Move () na zabezpečenie konkrétneho správania Pes beží. Obe triedy majú prístup k svojim vlastným metódam. Pri vytváraní objektu psa Calling Move () vykoná metódu prepísania.



java char na int
Metóda, ktorá prvádila v Java' title=

Osobitné prípady v prvoradosti

1. Volanie rodičovskej metódy pomocou super

Ten super kľúčové slovo môže vyvolať metódu rodičovskej triedy z prvoradej metódy.

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

Výstup
Parent's show() Child's show() 

2.  Konečné metódy nemôžu byť potlačené

Ak nechceme, aby bola spôsob prepísaná, vyhlasujeme to ako  finále . Prečítajte si  Použitie finále s dedičstvom

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


Výstup :



Metóda' loading='lazy' title=

3. Statické metódy

  • Statické metódy nemôžu byť potlačené; Definovanie statickej metódy v podtriede s rovnakým podpisom ako v nadtrieskovej metóde skryje metódu nadtrieskovej triedy.
  • Metódy inštancie môžu byť prepísané, ale podtrieda nemôže prepísať statickú metódu nadradenia.
  • Statická metóda v podtriede s rovnakým podpisom ako statická metóda SuperClass skryje pôvodnú metódu.
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();   } } 

Výstup
Parent static method Child instance method 

4. Súkromné ​​metódy

  • Súkromné ​​metódy nemôžu byť prepísané, pretože nie sú viditeľné pre podtriedy.
  • Metóda podtriedy s rovnakým názvom sa považuje za novú nezávislú metódu nesúvisiacu s rodičovskou triedou.
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();   } } 

Výstup
Child method 

5. Typy covariant návratnosti

  • V metóde, ktorý prepisuje typ vrátenia metódy prevedenia, môže byť podtrieda typu návratu metódy prepísanej.
  • Táto funkcia je známa ako typ návratu Covariant a umožňuje konkrétnejšie typy návratnosti v podtriede.
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();     } } 

Výstup
Child object 

Výnimočné manipulácie v prvoradosti

  • Prevádzková metóda nemôže hádzať nové alebo širšie kontrolované výnimky ako metóda v nadtrieskovej triede.
  • Môže hodiť menej alebo užšie skontrolované výnimky.
  • Môže hodiť akékoľvek nezaškrtnuté výnimky (napríklad RunTimeException) bez ohľadu na metódu nadtrieskovej metódy.
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());  }  } } 

Výstup
Child method 

Prečo používame prekladanie metódy?

  • Zmeniť alebo vylepšiť správanie existujúcej metódy v podtriede.
  • Na dosiahnutie runtime polymorfizmu - volania metódy závisia od skutočného typu objektu.
  • Opätovné použitie názvov metód logicky znižuje redundanciu.

Príklad v reálnom živote: Systém riadenia zamestnancov

Pochopme, aby sme sa prevalili analógiou v reálnom svete.

dlhý na šnúru

Predstavte si systém správy zamestnancov organizácie. Všetci zamestnanci zdieľajú určité správanie, ako je RaisesAlary () a propagovať (), ale logika sa líši pre rôzne úlohy, ako je manažér alebo inžinier. Môžeme si vytvoriť jedno zamestnanecké pole, v ktorom sú jednotliví zamestnanci rôznych typov (predajná technológia atď.) A zavolať ich funkcie. To veľa zjednodušuje celkový kód.

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

Výstup
--- Raising Salaries --- Manager salary raised with incentives. Engineer salary raised with bonus. --- Promotions --- Manager promoted to Senior Manager. Engineer promoted to Senior Engineer. 

Vysvetlenie: Aj keď sa objekty manažéra aj inžinierov uvádzajú na používanie typu zamestnanca Java nazýva preplnené metódy skutočných objektov za behu demonštrujúc dynamickú metódu Dispatch (runtime polymorfizmus).



Súvisiaci článok: Preťaženie metódy a potlačenie metódy

formátovanie reťazcov java