Вступ про перевиконання OOPs

Під час реалізації концепції успадкування в oops, усі функції батьківського класу використовуються всіма його похідними класами. Але у випадку, якщо одному похідному класу потрібна конкретна реалізація функції, яка була оголошена в батьківському класі, але використовує те саме ім’я, ту саму підпис і той же тип повернення, то використовується переосмислювальна функція. Переопределення дозволяє дочірньому класу переосмислити функцію, яка вже була визначена в його батьківському класі або надкласі. Таким чином, можна використовувати обидва визначення, вказавши об'єкт класу під час виклику методу. Наприклад, нехай функція суми є і в батьківському, і в дочірньому класі, і при виклику функції ми використовуємо об'єкт дочірнього класу, тоді буде викликаний метод, присутній у дочірньому класі, і замість цього, якщо ви використовуєте об'єкт батьківського класу, тоді метод присутній в батьківському класі буде називатися. Кажуть, що цей метод у дочірньому класі перекриває метод, присутній у його суперкласах.

Потреба в переоціненні методу

Нижче наведено методи переосмислення:

  • Переоцінка методу поліморфізму під час виконання допомагає досягти поліморфізму виконання в об'єктно-орієнтованих мовах програмування, таких як c ++, java, c # тощо.
  • Поліморфізм означає мати багато форм, тобто один підпис і кілька визначень. в об'єктно-орієнтованих мовах, коли і похідний, і батьківський клас мають однакове ім'я та підпис функції, тоді одноразовий компілятор вирішує визначення, чи потрібно його викликати. Поліморфізм під час виконання означає прив'язку визначення методу до методу, який називається, що відбувається під час виконання програми. Це дозволяє реалізувати аспект поліморфізму "однозначне множинне визначення". Ця функція використовує динамічну диспетчеризацію методів, яка має потужну концепцію об'єктно-орієнтованого дизайну, щоб принести повторне використання та надійність коду. Переопределення методу дозволяє нам викликати метод до будь-якого його похідного класу, не знаючи тип об'єкта похідного класу.
  • За допомогою цієї функції можна реалізувати спеціалізоване визначення до родової функції, яка була успадкована від її суперкласу.

Як переосмислення працює в ООП?

Наведене нижче пояснення говорить про те, як переосмислення працює:

  • OOP, допоможіть нам реалізувати поліморфізм виконання, успадковуючи особливості класу в інший. Давайте подивимось на функціонування переважаючих в ООП. Пізніше припустімо, що у нас є тварина суперкласового імені, яка має дві функції говорити і їсти. Є два підкласи кішка і собака, які поширюють назву суперкласу тварина.
  • Ці два підкласи використовують однакові функції говорити і їсти, але змінювати реалізацію, але зберігаючи підписи методів однаковими. Тепер у нашому головному методі, якщо ви викликаєте ці функції, вибираючи довідкову змінну, тоді лише під час виконання буде вирішено, яку функцію потрібно викликати. Наприклад, якщо об'єкт містить різницю дочірнього класу, який є кішкою або собакою, то функція відповідного класу буде називатися інакше, якщо об'єкт містить посилання на батьківський клас, тоді буде викликана функція класу тварин.
  • Тут ми повинні побачити, що викликана функція не залежить від типу опорної змінної. Це вирішує компілятор під час виконання, тільки це допомагає реалізувати поліморфізм виконання. Це також допомагає реалізувати спеціалізоване визначення методу загального визначення методу в батьківському класі.

Код:

class Animal(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Cat extends Animal(
//Overriding method
public void eat()
(
System.out.println("Cat is eating");
)
public void speak()
(
System.out.println("Cat is meowing");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
System.out.println("Dog is speaking");
)
)
public class Test(
public static void main(String() args)(
Animal an=new Dog();
Animal an1 = new Cat();
Animal an2 = new Animal();
an.speak();
an.eat();
an1.speak();
an1.eat();
an2.eat();
)
)

Вихід:

Примітка: Довідкова змінна дочірнього типу не може бути використана для утримання посилання на батьківський тип.

Правила переосмислення методу

Нижче наведено Правила переосмислення:

Правило №1

Список параметрів, оголошених у функції батьківського класу, повинен відповідати списку параметрів, зазначених у визначенні методу переосмислення в дочірньому класі.

Наприклад:

Метод у батьківському класі

public int test1(int a);

Метод у дочірньому класі - public string test1 (); // переопределення методу тут не буде підтримуватися, оскільки тип повернення та аргументи різні, але помилки часу компіляції не настане. Цей метод буде розглядатися як новий метод дитячого класу.

Правило №2

Тип повернення методу, присутнього в дочірньому класі, повинен бути однаковим або підтипом зворотного типу методу, який перекрито.

Наприклад:

Метод у батьківському класі

public Object test1(int a);

Метод у дитячому класі

public String test1();

Неправильно

Метод у батьківському класі

public String test1(int a);

Метод у дитячому класі

public Object test1();

Правило №3

Специфікатор доступу, присутній у методі батьківського класу, повинен бути настільки ж обмежуючим або обмежуючим, ніж метод, який його перекриває в дочірньому класі.

Неправильно

Метод у батьківському класі

public int test1(int a);

Метод у дитячому класі

private int test1() ; // more restrictive than public one

Правило №4

Можна замінити лише метод екземпляра із специфікатором доступу як загальнодоступним або за замовчуванням. Це тому, що тільки цей метод екземпляра може бути успадкований його підкласом, і, таким чином, сказати, що він буде замінений. У випадку, якщо метод екземпляра, визначений у батьківському класі, є більш обмежуючим прикладом public method, він не буде успадкований у своєму підкласі та робить, якщо хтось визначає той самий метод у підкласі, що сценарій не приймається як метод, що перекриває, оскільки публічні методи не можуть наслідувати це неможливо відмінити.

Наприклад:

Метод у батьківському класі

public int test1(int a); //can be inherited and overridden

Метод у дитячому класі

private int test1();

Неправильно

Метод у батьківському класі

private int test1(int a); //can not be inherited and overridden

Метод у дитячому класі

private int test1();//not overriding method of the parent class

Це розглядається як новий приватний метод дитячого класу

Правило №5

Супер ключове слово можна використовувати для виклику функції батьківського класу, яку переосмислив його підклас.

class Animal(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
super.speak(); // Here super keyword is used to call the speak function of the super class.ieAnimal
)
)
public class Test(
public static void main(String() args)(
Animal an=new Dog();
Animal an2 = new Animal();
an.speak();
an.eat();
an2.eat();
)
)

Вихід:

Правило №6

Конструктор класу не може бути замінений його підкласами, оскільки конструктор двох класів не може бути однаковим.

Правило №7

Поводження з винятками в режимі перекриття.

  • Метод Incase у батьківському класі не викидає жодного винятку, тоді метод переосмислення, присутній у підкласі, дозволяє викидати лише неперевірений виняток. Якщо метод переосмислення показує перевірений виняток, тоді компілятор покаже помилку.
  • Якщо метод у батьківському класі, який переосмислюється, викидає метод переосмислення тандему винятків, присутній у підкласі, за винятком того самого рівня або його підтипу в ієрархії винятків або зовсім не виняток.

Правило №8

Також можливе переосмислення методу в багаторівневому успадкуванні.

Код:

class Creature (
//Overriding method
public void eat()
(
System.out.println("Creature is eating");
)
public void speak()
(
System.out.println("Creature is speaking");
)
)
class Animal extends Creature(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
System.out.println("Dog is speaking");
)
)
public class Test(public static void main(String() args)(
Creature an=new Dog();
Animal an1 = new Animal();
Animal an2 = new Dog();
an.speak();
an.eat();
an1.speak();
an1.eat();
an2.eat();
)
)

Вихід:

Правило №9

Переважні правила методу на Java

  • Синхронізований метод легко може бути замінений несинхронізованим методом і навпаки.
  • Абстрактний метод, присутній в абстрактних класах або інтерфейсах, повинен бути перезаписаний для забезпечення конкретної реалізації заявленим методам, інакше він покаже помилку часу компіляції.
  • Визначення статичного методу з тим же ім'ям, що і статичний метод, присутній у батьківському класі, відомий як метод, що не приховує методу, який переосмислює, оскільки він не реалізує поліморфізм виконання.
  • Остаточні методи не можна перекрити.

Правило №10

Перевизначення методу на C ++

Перевизначення методу в c плюс досягається шляхом оголошення методу віртуальним. Віртуальне ключове слово використовується для досягнення поліморфізму часу в c ++. Тоді як у Java всі функції за замовчуванням приймаються як віртуальні.

Правило №11

Перевиконання методу відрізняється від перевантаження методу, оскільки це процес поліморфізму під час виконання, тоді як перевантаження і метод є прикладом поліморфізму часу компіляції. У способі переосмислення обов'язково зберігати підпис методу однаково. коли ми вносимо будь-які зміни в тип повернення методу або список параметрів, тоді компілятор розглядає це як перевантаження методу.

Перевизначення методу Метод перевантаження
class A(
public void test()(
System.out.println("In class A");
)
)
class B extends A(
public void test()(
System.out.println("In class A");
))public class Test(
public static void main(String() args)(
A a=new B();
a.test();
A b =new A();
b.test();
))
class A(
public void test()(
System.out.println("Method without arguments");
)
public void test(int x)(
System.out.println("Method with arguments");
System.out.println(x);
))public class Test(
public static void main(String() args)(
A a=new A();
a.test();
a.test(2);
)
)

Вихід:

Коли використовувати метод переосмислення методу?

Нижче наведено методи використання переосмислення:

  • OOP надає чудову особливість успадкування для формування великої ієрархії між суперкласом та підкласом - від меншої спеціалізації до більшої спеціалізації.
  • Чи можемо ми використовувати суперклас для створення основи, яка може бути успадкована у всіх її підкласах, а підкласи ми можемо визначити різні функції цих методів. Це досягається за допомогою переважаючої функції, коли спеціалізовані функції можуть бути надані для успадкованих методів у підкласах.
  • Це також допомагає створити основу для декількох класів, надаючи колекцію змінних та метод, який потрібно реалізувати у всіх його підкласах.

Висновок

OOP, концепції роблять код надійним та легким для повторного використання, коли вони ефективно використовуються. Переважна функція розширює використання успадкування для забезпечення конкретної реалізації загального методу батьківського class.і його підкласів. Це використовує концепцію поліморфізму виконання, щоб викликати правильне визначення методу. Диспетчеризація динамічного методу проводиться лише під час виконання, який перевіряє посилання на клас, який об'єкт тримає для виклику методу. Ця функція керується різними правилами і не застосовується для статичних методів. Ми можемо реалізувати переосмислення методу на будь-якій об'єктно-орієнтованій мові та зробити нашу програму швидшою та надійною.

Рекомендовані статті

Це посібник щодо переосмислення OOP. Тут ми обговорюємо, як головне функціонує в ООП, коли його використовувати, та 11 правил з кодами та висновками. Ви також можете ознайомитись з іншими пов'язаними з нами статтями, щоб дізнатися більше -

  1. Перевірка в PHP
  2. Перевірка в JavaScript
  3. Що таке OOP?
  4. Перевизначення методу в C #
  5. Приклади переосмислення Java
  6. Статичний метод JavaScript | Як працювати з прикладами