logo

Nepaprastai Java

Kai poklasis pateikia specifinį metodą, kuris jau yra apibrėžtas jo pagrindinėje klasėje, jis vadinamas metodu, kuris yra svarbus. Nepaisomas poklasio metodas turi būti tas pats pavadinimo parametrai ir grąžinimo tipas kaip ir metodas pagrindinėje klasėje.

Metodo, kuris viršija, taisyklės

  • Vardo parametrai ir grąžinimo tipas turi atitikti pagrindinį metodą.
  • „Java“ pasirenka, kurį metodą vykdyti vykdymo metu, atsižvelgiant į tikrąjį objekto tipą, o ne tik atskaitos kintamojo tipą.
  • Statiniai metodai negali būti nepaisomi.
  • @Override anotacija Gauna klaidas, tokias kaip rašybos klaidos metodo pavadinimuose.
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();  } } 

Išvestis
Dog is running. Animal is eating. Dog is barking. 

Paaiškinimas: Gyvūnų klasė apibrėžia bazines funkcijas kaip judėti () ir valgyti () . Šunų klasė paveldi iš gyvūno ir nepaisymas MOKTO () metodas, skirtas užtikrinti konkretų elgesį Šuo bėga. Abi klasės gali pasiekti savo metodus. Kurdamas šuns objekto skambučio judėjimą () vykdo nepaisomą metodą.



Metodas, viršijantis „Java“' title=

Specialūs atvejai viršuje

1. Tėvų metodo skambinimas naudojant super

Super raktinis žodis Gali ištarti pagrindinės klasės metodą iš svarbiausio metodo.

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

Išvestis
Parent's show() Child's show() 

2.  Galutiniai metodai negali būti nepaisomi

Jei nenorime, kad metodas būtų panaikintas, mes deklaruojame jį kaip  galutinis . Prašau pamatyti  Naudojant galutinį paveldėjimą

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


Išvestis :



„Methodoverriding“' loading='lazy' title=

3. Statiniai metodai

  • Statiniai metodai negali būti nepaisomi; Statinio metodo apibrėžimas poklase su tokiu pačiu parašu kaip ir superklasė slepia superklasės metodą.
  • Pavyzdžių metodai gali būti nepaisomi, tačiau poklasis negali nepaisyti superklasės statinio metodo.
  • Statinis metodas poklase su tokiu pat parašu kaip ir superklasinis statinis metodas slepia pradinį metodą.
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();   } } 

Išvestis
Parent static method Child instance method 

4. Privatūs metodai

  • Privatūs metodai negali būti nepaisomi, nes jie nėra matomi poklasiniams.
  • Poklasinio metodas tuo pačiu pavadinimu yra traktuojamas kaip naujas nepriklausomas metodas, nesusijęs su tėvų klase.
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();   } } 

Išvestis
Child method 

5. Kovarianto grąžinimo tipai

  • Taikant metodą, viršijančio viršutinio metodo grąžinimo tipą, gali būti nepertraukiamo metodo grąžinimo tipo poklasis.
  • Ši funkcija yra žinoma kaip „Covariant Return Type“ ir leidžia paprastesnius grąžinimo tipus poklase.
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();     } } 

Išvestis
Child object 

Išimčių tvarkymas viršuje

  • Svarbiausias metodas negali mesti naujų ar platesnių patikrintų išimčių nei superklase metodas.
  • Tai gali išmesti mažiau ar siauresnių patikrintų išimčių.
  • Tai gali mesti bet kokias nepatikrintas išimtis (pvz., „RunTimeException“), nepaisant superklasės metodo.
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());  }  } } 

Išvestis
Child method 

Kodėl mes naudojame metodą, kuris yra svarbus?

  • Pakeisti ar sustiprinti esamo metodo elgesį poklase.
  • Norint pasiekti vykdymo laiko polimorfizmą - metodo skambučiai priklauso nuo faktinio objekto tipo.
  • Pakartotinai naudoti metodo pavadinimus logiškai mažinant atleidimą.

Realaus gyvenimo pavyzdys: darbuotojų valdymo sistema

Supraskime, kad tai yra realaus pasaulio analogija.

Įsivaizduokite organizacijos darbuotojų valdymo sistemą. Visi darbuotojai turi tam tikrą elgesį, pavyzdžiui, „Raisesalary“ () ir reklamuoja (), tačiau logika skiriasi skirtingais vaidmenimis, tokiais kaip vadovas ar inžinierius. Mes galime sukurti vieną darbuotojų masyvą, kuriame atskiri darbuotojai yra skirtingų tipų (pardavimo technologijos ir tt) ir paskambinti jų funkcijoms. Tai daug supaprastina bendrą kodą.

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

Išvestis
--- Raising Salaries --- Manager salary raised with incentives. Engineer salary raised with bonus. --- Promotions --- Manager promoted to Senior Manager. Engineer promoted to Senior Engineer. 

Paaiškinimas: Nors tiek vadovo, tiek inžinieriaus objektai yra nurodomi naudojant darbuotojo tipą „Java“, vadina faktinių objektų, esančių „Runtime“, metodus, rodančius dinaminio metodo išsiuntimą (vykdymo laiko polimorfizmas).



Susijęs straipsnis: Metodo perkrovimas ir metodas, viršijantis