Introducere cu privire la suprasolicitarea în POS

În timp ce implementăm conceptul de moștenire în oops, toate funcțiile din clasa părinte sunt utilizate de toate clasele sale derivate. Dar, în cazul în care o clasă derivată dorește implementarea specifică a funcției care a fost declarată în clasa părinte, dar folosind același nume, aceeași semnătură și același tip de returnare, atunci se utilizează o caracteristică imperativă. Suprasolicitarea permite clasei copil să redefinească funcția care a fost deja definită în clasa sau superclasa părinte. În acest fel, se poate utiliza ambele definiții specificând obiectul clasei în timp ce se apelează la metodă. De exemplu, să existe o funcție de sumă atât în ​​clasa părinte cât și în copil, iar în timp ce apelăm funcția folosim obiectul clasei copil, atunci se va apela metoda prezentă în clasa copil și, în schimb, dacă folosiți obiectul clasei părinte, atunci metoda prezentă în clasa părintească se va chema. despre această metodă din clasa pentru copii se înlocuiește metoda prezentă în superclasele sale.

Nevoie de suprasolicitare a metodei

Urmează metodele de suprapunere:

  • Metoda de rulare a polimorfismului ajută la realizarea polimorfismului în timpul rulării în limbaje de programare orientate pe obiecte, cum ar fi c ++, java, c # etc.
  • Polimorfism înseamnă a avea mai multe forme, adică o semnătură și mai multe definiții. în limbajele orientate pe obiect atunci când atât clasa derivată cât și cea parentală au același nume și semnătura unei funcții, atunci la un singur compilator rezolvă definiția are nevoie să apeleze. Polimorfismul de execuție înseamnă legarea unei definiții a metodei la o metodă numită are loc la timpul de execuție al unui program. Permite implementarea aspectului „unei definiții multiple” a polimorfismului. Această caracteristică utilizează o metodă dinamică de expediere care are un concept puternic de design orientat pe obiecte pentru a aduce reutilizarea codului și robustete. Suprasolicitarea unei metode ne permite apelul unei metode la oricare dintre clasele derivate fără a cunoaște tipul de obiect al clasei derivate.
  • Utilizând această caracteristică se poate implementa o definiție specializată în funcție generică care a fost moștenită de la superclasa sa.

Cum funcționează Suprarealizarea în OOP-uri?

Explicația de mai jos spune că modul de supraviețuire:

  • OOP, ne ajută să punem în aplicare polimorfismul în timp de moștenire, în timp ce moștenim o caracteristică a clasei în alta. Haideți să aruncăm o privire asupra modului de funcționare a funcției primare în POS. Mai târziu să presupunem că avem un nume de superclasa animal care are două funcții vorbește și mănâncă. Există două subclase pisică și câine care extinde numele superclasei animal.
  • Aceste două subclase folosesc aceleași funcții vorbesc și mănâncă, dar schimbă implementarea, păstrând la fel semnătura metodelor. Acum, în metoda noastră principală, dacă apelați aceste funcții, alegând variabila de referință, atunci la timpul de execuție, se va decide ce funcție trebuie să apeleze. De exemplu, dacă obiectul deține diferența de clasă pentru copii care este pisica sau câinele, atunci funcția unei clase respective va fi numită altfel dacă obiectul deține referința clasei părinte, atunci funcția unei clase de animale va fi apelată.
  • Aici ar trebui să vedem că funcția numită nu depinde de tipul variabilei de referință. Acest lucru este decis de compilator în timpul funcționării, numai că ajută la implementarea polimorfismului în timpul rulării. De asemenea, ajută la implementarea definiției specializate a metodei definiției generice a metodei în clasa părinte.

Cod:

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

ieşire:

Notă: o variabilă de referință de tip copil nu poate fi utilizată pentru a reține o referință la tipul părinte.

Reguli pentru suprasolicitarea unei metode

Următoarele sunt regulile de suprapunere:

Regula nr. 1

O listă a parametrilor declarați în funcția clasei părinte ar trebui să corespundă listei parametrilor menționați în definiția metodei imperative în clasa copil.

De exemplu:

Metoda din clasa părintească

public int test1(int a);

O metodă în clasa copil - public string test1 (); // metoda care trece nu va fi acceptată, deoarece tipul returnării și argumentele sunt diferite, dar nu va apărea o eroare de compilare. Această metodă va fi considerată o nouă metodă a unei clase de copii.

Regula nr. 2

Tipul de retur al metodei prezente în clasa copil trebuie să fie același sau un subtip al tipului de retur al metodei care este suprasolicitat.

De exemplu:

Metoda într-o clasă părintească

public Object test1(int a);

Metoda din clasa de copii

public String test1();

Incorect

Metoda din clasa părintească

public String test1(int a);

Metoda din clasa de copii

public Object test1();

Regula nr. 3

Specificatorul de acces prezent în metoda clasei părinte trebuie să fie la fel de restrictiv sau mai restrictiv decât metoda care îl preschimbă în clasa copil.

Incorect

Metoda din clasa părintească

public int test1(int a);

Metoda în clasa de copii

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

Regula nr. 4

Doar metoda instanței cu specificul de acces ca protejat public sau implicit poate fi anulată. Acest lucru se datorează faptului că numai această metodă de instanță poate fi moștenită de subclasa sa și astfel se spune că este suprasolicitată. În cazul în care metoda de instanță specificată în clasa părinte este un exemplu de metodă publică mai restrictivă, atunci ea nu va fi moștenită în subclasa sa, iar dacă cineva definește aceeași metodă într-o subclasă, scenariul nu este luat ca o metodă care să depășească, deoarece metodele publice nu pot fi moștenit, acest lucru nu poate fi anulat.

De exemplu:

Metoda din clasa părintească

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

Metoda din clasa de copii

private int test1();

Incorect

Metoda din clasa părintească

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

Metoda din clasa de copii

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

Este considerată o nouă metodă privată a clasei de copii

Regula nr. 5

Super-cuvântul cheie poate fi folosit pentru a apela funcția clasei părinte care a fost anulată de subclasa sa.

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

ieşire:

Regula nr. 6

Constructorul unei clase nu poate fi anulat de subclasele sale, deoarece un constructor din două clase nu poate fi același.

Regula nr. 7

Excepție Manipulare în Supraveghere.

  • Metoda incasare în clasa părinte nu aruncă nicio excepție, atunci metoda suprascriere prezentă în subclasă este permisă să arunce o singură excepție necherificată. În cazul în care metoda de suprapunere arată o excepție verificată, atunci compilatorul va afișa o eroare.
  • Dacă metoda din clasa părinte care este suprasolicitată aruncă o metodă de suprapunere în tandem de excepție prezentă în subclasă trebuie printr-o excepție de același nivel sau subtipul său în ierarhia de excepție sau deloc excepție.

Regula nr. 8

Metoda care depășește moștenirea pe mai multe niveluri este de asemenea posibilă.

Cod:

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

ieşire:

Regula nr. 9

Reguli privind metoda de supraveghere în Java

  • O metodă sincronizată poate fi ușor ignorată printr-o metodă nesincronizată și invers.
  • Metoda abstractă prezentă în clase sau interfețe abstracte are rolul de a fi suprascrisă pentru a oferi o implementare specifică metodelor declarate, altfel va afișa o eroare de compilare.
  • Definirea unei metode statice cu același nume ca o metodă statică prezentă în clasa părinte este cunoscută sub numele de metodă care nu ascunde o metodă care depășește, deoarece nu implementează polimorfismul în timpul rulării.
  • Metodele finale nu pot fi anulate.

Regula nr. 10

Metoda care trece peste C ++

Metoda care trece peste c plus se realizează prin declararea unei metode ca virtuală. Un cuvânt cheie virtual este utilizat pentru a realiza polimorfismul în timpul rulării în c ++. În timp ce în Java toate funcțiile sunt prelevate în mod implicit ca virtuale.

Regula nr. 11

Supraîncărcarea metodei este diferită de supraîncărcarea metodei, deoarece este un proces de polimorfism de rulare, în timp ce supraîncărcarea și metoda este un exemplu de polimorfism în timp. În cazul suprasolicitării metodei este obligatoriu să păstrați semnătura metodei la fel. când efectuăm orice modificare a tipului de returnare a metodei sau a listei de parametri, atunci compilatorul o tratează ca o suprasarcină a metodei.

Metoda Suprasolicitare Metoda Suprasarcina
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);
)
)

ieşire:

Când se utilizează Metoda Suprascriere?

Următoarele sunt metodele de utilizare Overriding:

  • OOP oferă o caracteristică minunată a moștenirii pentru a forma o mare ierarhie între superclase și subclase, de la o specializare mai mică la o specializare mai mare.
  • Putem folosi superclasa pentru a oferi un cadru care poate fi moștenit în toate subclasele sale și subclase, putem defini funcționarea diferită a acestor metode. Acest lucru se realizează prin caracteristica suprapusă în care funcționarea specializată poate fi furnizată metodelor moștenite subclase.
  • De asemenea, ajută la furnizarea unui cadru pentru mai multe clase, oferind o colecție de variabile și metoda care trebuie implementată în toate subclasele sale.

Concluzie

Conceptele OOP, conceptele fac codul robust și ușor de reutilizat atunci când sunt utilizate în mod eficient. Funcția suprascriere îmbunătățește utilizarea moștenirii pentru a asigura implementarea specifică metodei generice a clasei părinte.în subclasele sale. Aceasta folosește conceptul de polimorfism în timp de runtime pentru a declanșa definiția corectă a metodei. Trimiterea dinamică a metodei se face numai la timpul de execuție, care verifică referința clasei pe care obiectul o deține pentru a apela metoda. Această caracteristică este ghidată prin diferite reguli și nu se aplică pentru metodele statice. Putem implementa metoda care se suprapune în orice limbaj orientat pe obiecte și face ca programul nostru să fie mai rapid și robust.

Articole recomandate

Acesta este un ghid de suprasolicitare în OOP. Aici vom discuta despre modul de funcționare imperativ în OOP-uri, când să-l folosească și 11 reguli cu coduri și ieșire. Puteți, de asemenea, să parcurgeți alte articole conexe pentru a afla mai multe-

  1. Suprasolicitare în PHP
  2. Suprasolicitare în JavaScript
  3. Ce este OOP?
  4. Metoda de suprapunere în C #
  5. Exemple de supraveghere în Java
  6. JavaScript Metoda statică | Cum să lucrați cu exemple