logo

Nadjačano u Javi

Kad podrazred osigurava specifičnu implementaciju za metodu koja je već definirana u svojoj matičnoj klasi, to se naziva nadjačavanjem metode. Pretplaćena metoda u podrazli mora imati istoimene parametre i tip povratka kao metoda u matičnoj klasi.

Pravila za prevladavanje metoda

  • Naziv Parametri i tip povratka moraju se podudarati s roditeljskom metodom.
  • Java odabire koju metodu radi u vrijeme pokretanja na temelju stvarne vrste objekta, a ne samo referentne vrste varijable.
  • Statičke metode se ne mogu nadjačati.
  • A @Override napomena hvata pogreške poput pogrešaka u pogreškama u imenima metoda.
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();  } } 

Izlaz
Dog is running. Animal is eating. Dog is barking. 

Obrazloženje: Životinjska klasa definira osnovne funkcionalnosti poput potez() i jesti() . Klasa psa nasljeđuje od životinje i poništiti Metoda Move () za pružanje određenog ponašanja Pas trči. Obje klase mogu pristupiti vlastitim metodama. Prilikom stvaranja psećeg objekta poziva se move () izvršava nadjačanu metodu.



Metoda koja nadjačava u Javi' title=

Posebni slučajevi u prevladavanju

1. Pozivanje roditeljske metode pomoću super

A Super ključna riječ može pozvati metodu matične klase iz metode prevladavanja.

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

Izlaz
Parent's show() Child's show() 

2.  Konačne metode ne mogu se nadjačati

Ako ne želimo da se metoda nadjača, izjavljujemo je  konačan . Molimo pogledajte  Korištenje finala s nasljeđivanjem

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


Izlaz ::



Metodonačiranje' loading='lazy' title=

3. statičke metode

  • Statičke metode se ne mogu nadjačati; Definiranje statičke metode u podrazredu s istim potpisom kao u superklasima skriva metodu superklase.
  • Metode instanci mogu se nadjačati, ali podrazred ne može nadjačati statičku metodu superklase.
  • Statička metoda u podrazredu s istim potpisom kao i statička metoda superklasa skriva izvornu metodu.
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();   } } 

Izlaz
Parent static method Child instance method 

4. Privatne metode

  • Privatne metode ne mogu se nadjačati jer nisu vidljive podrazredima.
  • Metoda podrazreda s istim imenom tretira se kao nova neovisna metoda koja nije povezana s matičnom klasom.
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();   } } 

Izlaz
Child method 

5. Kovarijantni tipovi povratka

  • U metodi koja nadjačava vrstu povratka metode prevladavanja može biti podrazred returnog tipa nadjačene metode.
  • Ova je značajka poznata kao kovarijantna vrsta povratka i omogućava specifičnije vrste povrata u 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();     } } 

Izlaz
Child object 

Upravljanje iznimkama u prevladavanju

  • Način prevladavanja ne može izbaciti nove ili šire provjerene iznimke od metode u superklasu.
  • Može baciti manje ili uže provjerene iznimke.
  • Može baciti bilo kakve neprovjerene iznimke (poput RuntimeException) bez obzira na metodu superklase.
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());  }  } } 

Izlaz
Child method 

Zašto koristimo nadjačavanje metode?

  • Promjena ili poboljšanje ponašanja postojeće metode u potklasu.
  • Da bi se postigao polimorfizam izvođenja - pozivi metoda ovise o stvarnoj vrsti objekta.
  • Da bi se metoda ponovno upotrijebila logično smanjenje viška.

Primjer iz stvarnog života: Sustav upravljanja zaposlenicima

Razumijemo nadjačavanje analogijom u stvarnom svijetu.

Zamislite sustav upravljanja zaposlenicima organizacije. Svi zaposlenici dijele neka ponašanja kao što su RaisesAlary () i promoviraju (), ali logika se razlikuje za različite uloge poput menadžera ili inženjera. Možemo stvoriti jedinstveni niz zaposlenika u kojem su pojedini zaposlenici različitih vrsta (prodajne tehnologije itd.) I nazvati njihove funkcije. To puno pojednostavljuje cjelokupni 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();  }  } } 

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

Obrazloženje: Iako se i menadžer i inženjerski objekti upućuju na korištenje tipa zaposlenika Java poziva nadjačene metode stvarnih objekata u vrijeme izvođenja pokazujući dinamičku dinamičku metodu (polimorfizam runtime).



java popis

Povezani članak: Preopterećenje metode i prevladavanje metoda