logo

Превладавање у Јави

Када поткласа пружа одређену примену за методу која је већ дефинисана у свом родитељском разреду, то се назива превладавајући начин. Овернути метод у поткласи мора имати исте параметре имена и врсти повратка као метода у матичној класи.

јавасцрипт онцлицк

Правила за превладавање метода

  • Параметри имена и врста повратка морају се подударати са родитељском методом.
  • Јава бира која метода да се покреће у време трајања на основу стварног типа објекта, а не само референтна варијабилна врста.
  • Статичке методе се не могу надјачати.
  • Тхе АНСИТОН АНСИТОН хвата грешке попут погрешака у именама метода.
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();  } } 

Излаз
Dog is running. Animal is eating. Dog is barking. 

Објашњење: Класа животиња дефинише основне функционалности попут потез () и јести () . Наслеђује класе паса од животиње и надјачати метода потеза () да пружи одређено понашање Обе часове могу приступити сопственим поступцима. Приликом креирања паса Објект Позив за позивање () извршава преглашени метод.



Метода превладавајућа у Јави' title=

Посебни случајеви у прегледу

1. Позивање родитељског метода помоћу супер

Тхе Супер кључна реч Може позвати методу родитељске класе са превладавајуће методе.

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

Излаз
Parent's show() Child's show() 

2.  Завршне методе се не могу надјачати

Ако не желимо да се поступак надјачамо, прогласимо га као  коначан . Погледајте  Користећи финале са наследством

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


Излаз :



Методоверингринг' loading='lazy' title=

3. Статичке методе

  • Статичке методе не могу се надјачати; Дефинисање статичке методе у подразлици са истим потписом као у суперкласу скрива методу суперкласа.
  • Методе инстанције могу се надјачати, али поткласа не може надвладати суперкласу статичку методу.
  • Статичка метода у подразни са истим потписом као и суперкласа статичка метода скрива оригиналну методу.
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();   } } 

Излаз
Parent static method Child instance method 

4. Приватне методе

  • Приватне методе се не могу надјачати јер нису видљиви подкласима.
  • Метода подкласа са истим именом третира се као нова независна метода која није повезана са родитељском класом.
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();   } } 

Излаз
Child method 

5. Коваријантни типови повратка

  • У методу превладавајући врсту повратка превладавајуће методе може бити поткласа врсте повратка преглашене методе.
  • Ова функција је позната као коваријантна врста повратка и омогућава више специфичнију врста повратка у подразни.
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();     } } 

Излаз
Child object 

Изузетно руковање у прегледу

  • Превладавајућа метода не може да баца нове или шире провјерене изузетке од методе у суперкласу.
  • Може бацити мање или ужи провјерено изузеће.
  • Може бацити све непровјерене изузетке (попут Рунтимеекцептион) без обзира на методу суперкласа.
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());  }  } } 

Излаз
Child method 

Зашто користимо превладавајући начин?

  • Да се ​​промени или побољшају понашање постојеће методе у подразлици.
  • Да би се постигло полуморфизам за рунтиме - метода позиви зависе од стварног типа објекта.
  • За поновну употребу имена метода логично смањује редундантност.

Пример реалног живота: Систем управљања запосленима

Схватимо превладавајуће аналогију стварног света.

јава низ сортиран

Замислите систем управљања запосленима организације. Сви запослени деле нека понашања попут раковне () и промовишу (), али логика се разликује за различите улоге попут менаџера или инжењера. Можемо да створимо низ запосленог у којем су поједини запослени у различитим типовима (продаја техничара итд.) И називају своје функције. Ово поједностављује укупни број у пуно.

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

Излаз
--- Raising Salaries --- Manager salary raised with incentives. Engineer salary raised with bonus. --- Promotions --- Manager promoted to Senior Manager. Engineer promoted to Senior Engineer. 

Објашњење: Иако се и менаџер и инжењерски објекти називају коришћењем типа запослених Јава, назива преглашене методе стварних објеката на извођању динамичке методе (полуморфизам за рунтиме).



Сродни чланак: Метода преоптерећење и превладавање метода