Въведение относно преодоляването на OOPs

Докато реализирате концепцията за наследяване в oops, всички функции в родителския клас се използват от всички негови производни класове. Но в случай, че един производен клас иска конкретната реализация на функцията, която е декларирана в родителски клас, но използва същото име, същия подпис и същия тип връщане, тогава се използва преобладаващата функция. Преопределянето позволява на клас дете да предефинира функцията, която вече е дефинирана в неговия родителски клас или суперклас. По този начин човек може да използва както определението, като посочи обекта на класа, докато извиква метода. Например, нека има функция за суми както в родителския, така и в дочерния клас и докато извикваме функцията, използваме обекта на детски клас, тогава методът, присъстващ в дочерния клас, ще бъде извикан и вместо това, ако използвате обект родителски клас, тогава методът присъства в родителския клас ще бъде извикан. се казва, че този метод в детския клас отменя метода, присъстващ в неговите суперкласове.

Необходимост от преодоляване на метода

Следват методите за преодоляване:

  • Методът за изпълнение на полиморфизъм по време на изпълнение помага да се постигне полиморфизъм по време на работа в обектно-ориентирани езици за програмиране като c ++, java, c # и т.н.
  • Полиморфизмът означава да има много форми, т.е. един подпис и множество дефиниции. в обектно-ориентираните езици, когато и производният, и родителският клас имат едно и също име и подпис на функция, тогава при еднократен компилатор решава дефиницията, трябва ли да се извиква. Полиморфизъм по време на изпълнение означава свързване на определението на метод с метод, наречен се случва по време на изпълнение на програма. Той позволява прилагането на полиморфизъм аспект „еднозначно множествено определение“. Тази функция използва динамичен метод за изпращане, който има мощна концепция за обектно-ориентиран дизайн, за да внесе повторно използване и стабилност на кода. Преопределянето на метод ни позволява да извикаме метод към който и да е от неговите производни класове, без да знаем типа на обекта на производен клас.
  • Използвайки тази функция, може да се приложи специализирана дефиниция към родова функция, която е наследена от нейния суперклас.

Как Преодоляването работи в OOPs?

По-долу обяснението казва, че как по-важното работи:

  • OOPs, помогнете ни да внедрим полиморфизъм по време на изпълнение, докато наследяваме характеристики на клас в друг. Нека да разгледаме работата на преобладаващите в OOPs. По-късно да предположим, че имаме животно с име на суперклас, което има две функции да говори и да се храни. Има две подкласове котка и куче, които разширяват името на суперкласовото животно.
  • Тези два подкласа използват едни и същи функции говорят и ядат, но променят изпълнението, но запазват подписа на методите еднакви. Сега в нашия основен метод, ако извикате тези функции, избирайки референтната променлива, тогава само по време на изпълнение ще се реши коя функция трябва да извика. Например, ако обектът притежава разликата на детски клас, който е котка или куче, функцията на съответния клас ще бъде наречена по друг начин, ако обектът държи референцията на родителския клас, тогава ще се извика функцията на клас животни.
  • Тук трябва да видим, че функцията, която се нарича, не зависи от типа на референтната променлива. Това решава компилаторът по време на изпълнение само той помага да се приложи полиморфизъм по време на изпълнение. Също така помага да се приложи специализираното определение на метода на родовото определение на метода в родителския клас.

Код:

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 метод, той няма да бъде наследен в неговия подклас и прави, ако някой дефинира същия метод в подклас, този сценарий не се приема като метод, отменящ, тъй като публичните методи не могат Ако се наследи това не може да бъде отменено.

Например:

Методът в родителския клас

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

Преодоляването на метода е различно от претоварването на метода, тъй като това е процес на полиморфизъм по време на работа, докато претоварването и методът са пример за полиморфизъм във време на компилация. При отменяне на метод е задължително подписът на метода да е същият. когато направим каквато и да е промяна в метода за връщане на типа или списъка с параметри, тогава компилаторът го третира като претоварване на метод.

Метод Overriding Метод Претоварване
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);
)
)

изход:

Кога да използваме метода за отмяна?

Следват методите за използване на Overriding:

  • OOPs предоставя прекрасна характеристика на наследяването, за да формира голяма йерархия между суперклас и подклас е от по-малка специализация до по-голяма специализация.
  • Можем ли да използваме суперкласа, за да предоставим рамка, която може да бъде наследена във всичките му подкласове, а подкласовете можем да определим различното функциониране на тези методи. Това се постига чрез преобладаваща функция, при която може да се осигури специализирано функциониране на наследствените методи в подкласовете.
  • Освен това помага да се създаде рамка за множество класове, като предоставя колекция от променливи и методът, който трябва да бъде приложен във всичките му подкласове.

заключение

OOP, концепциите правят кода здрав и лесен за повторно използване, когато се използват ефективно. Преимуществената функция увеличава използването на наследяване, за да предостави специфичното изпълнение на общия метод на родителския class.in неговите подкласове. Това използва концепцията за полиморфизъм по време на работа, за да предизвика правилното определение на метода. Изпращането на динамичен метод се извършва само по време на изпълнение, което проверява референцията на клас, който обектът държи, за да извика метода. Тази функция се ръководи от различни правила и не се прилага за статични методи. Можем да внедряваме метода за отмяна на всеки обектно-ориентиран език и да направим програмата ни по-бърза и здрава.

Препоръчителни статии

Това е ръководство за преодоляване на OOP. Тук обсъждаме как преодоляването работи в OOPs, кога да се използва и 11 правила с кодове и изход. Можете също да разгледате и другите ни свързани статии, за да научите повече-

  1. Преодоляване на PHP
  2. Отмяна на JavaScript
  3. Какво е OOP?
  4. Метод отменяне в C #
  5. Примери за преодоляване на Java
  6. Статичен метод на JavaScript | Как се работи с примери