Introduzione su Override in OOPs

Durante l'implementazione del concetto di eredità in oops, tutte le funzioni nella classe genitore vengono utilizzate da tutte le sue classi derivate. Ma nel caso in cui una classe derivata desideri l'implementazione specifica della funzione che è stata dichiarata nella classe genitore ma utilizzando lo stesso nome, la stessa firma e lo stesso tipo restituito, viene utilizzata la funzione di sostituzione. L'override consente alla classe figlio di ridefinire la funzione che è già stata definita nella sua classe genitore o superclasse. In questo modo, è possibile utilizzare entrambe le definizioni specificando l'oggetto della classe mentre si chiama il metodo. Ad esempio, supponiamo che ci sia una funzione di somma sia nella classe padre che nella classe figlio e mentre chiamiamo la funzione usiamo l'oggetto della classe figlio allora verrà chiamato il metodo presente nella classe figlio e invece se usi l'oggetto della classe genitore allora il metodo presente nella classe genitore verrà chiamato. si dice che questo metodo nella classe figlio abbia la precedenza sul metodo presente nelle sue superclassi.

Necessità di ignorare il metodo

Di seguito sono riportati i metodi di sostituzione:

  • La sostituzione del metodo del polimorfismo di runtime aiuta a ottenere il polimorfismo di runtime in linguaggi di programmazione orientati agli oggetti come c ++, java, c #, ecc.
  • Polimorfismo significa avere molte forme, ad esempio una firma e definizioni multiple. nei linguaggi orientati agli oggetti quando sia la classe derivata che quella genitore hanno lo stesso nome e la stessa firma di una funzione, allora il compilatore che risolve una volta ha bisogno di chiamare la definizione. Polimorfismo di runtime significa che l'associazione di una definizione di metodo a un metodo chiamato si sta verificando durante l'esecuzione di un programma. Permette di implementare l'aspetto del polimorfismo di "una sola definizione multipla" Questa funzionalità utilizza l'invio di metodi dinamici che ha un potente concetto di progettazione orientata agli oggetti per portare riutilizzo e robustezza del codice. L'override di un metodo ci consente di chiamare un metodo con una qualsiasi delle sue classi derivate senza conoscere il tipo di oggetto della classe derivata.
  • Utilizzando questa funzione è possibile implementare una definizione specializzata per la funzione generica che è stata ereditata dalla sua superclasse.

Come funziona l'override negli OOP?

La spiegazione di seguito dice che funziona come override:

  • OOP, ci aiutano a implementare il polimorfismo di runtime ereditando le caratteristiche di una classe in un'altra. Diamo un'occhiata al funzionamento dell'override negli OOP. Più tardi supponiamo di avere un animale di nome superclasse che ha due funzioni parlare e mangiare. Esistono due sottoclassi di cane e gatto che estende il nome della superclasse animale.
  • Queste due sottoclassi utilizzano le stesse funzioni di parlare e mangiare, ma cambiano l'implementazione mantenendo la stessa firma dei metodi. Ora nel nostro metodo principale se chiamate queste funzioni scegliendo la variabile di riferimento, solo in fase di esecuzione verrà deciso quale funzione deve chiamare. Ad esempio, se l'oggetto contiene la differenza della classe figlio che è gatto o cane, la funzione di una rispettiva classe verrà chiamata altrimenti, se l'oggetto contiene il riferimento della classe genitore, verrà chiamata la funzione di una classe animale.
  • Qui dovremmo vedere che la funzione chiamata non dipende dal tipo di variabile di riferimento. Questo è deciso dal compilatore in fase di runtime solo aiuta a implementare il polimorfismo di runtime. Aiuta anche a implementare la definizione specializzata del metodo della definizione generica di metodo nella classe genitore.

Codice:

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

Produzione:

Nota: una variabile di riferimento di tipo figlio non può essere utilizzata per contenere un riferimento al tipo principale.

Regole per l'override di un metodo

Di seguito sono riportate le Regole di sostituzione:

Regola n. 1

Un elenco dei parametri dichiarati nella funzione della classe genitore dovrebbe corrispondere all'elenco dei parametri menzionati nella definizione del metodo di sostituzione nella classe figlio.

Per esempio:

Il metodo nella classe genitore

public int test1(int a);

Un metodo in classe figlio - stringa pubblica test1 (); // la sostituzione del metodo non sarà supportata qui poiché il tipo di ritorno e gli argomenti sono diversi ma non verrà generato alcun errore in fase di compilazione. Questo metodo verrà considerato come un nuovo metodo di una classe figlio.

Regola n. 2

Il tipo restituito del metodo presente nella classe figlio deve essere lo stesso o un sottotipo del tipo restituito del metodo sottoposto a override.

Per esempio:

Il metodo in una classe genitore

public Object test1(int a);

Il metodo nella classe figlio

public String test1();

scorretto

Il metodo nella classe genitore

public String test1(int a);

Il metodo nella classe figlio

public Object test1();

Regola n. 3

L'identificatore di accesso presente nel metodo della classe genitore deve essere ugualmente restrittivo o più restrittivo del metodo che lo sovrascrive nella classe figlio.

scorretto

Il metodo nella classe genitore

public int test1(int a);

Metodo nella classe figlio

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

Regola n. 4

Solo il metodo di istanza con identificatore di accesso come pubblico protetto o predefinito può essere ignorato. Questo perché solo questo metodo di istanza può essere ereditato dalla sua sottoclasse e quindi essere ignorato. Nel caso in cui il metodo di istanza specificato nella classe genitore sia un metodo pubblico di esempio più restrittivo, allora non verrà ereditato nella sua sottoclasse e lo fa se qualcuno sta definendo lo stesso metodo in una sottoclasse che lo scenario non viene preso come metodo prevalente poiché i metodi pubblici non possono essere ereditato questo non può essere ignorato.

Per esempio:

Il metodo nella classe genitore

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

Il metodo nella classe figlio

private int test1();

scorretto

Il metodo nella classe genitore

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

Il metodo nella classe figlio

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

È considerato come un nuovo metodo privato della classe figlio

Regola n. 5

La super parola chiave può essere utilizzata per chiamare la funzione della classe genitore che è stata sovrascritta dalla sua sottoclasse.

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

Produzione:

Regola n. 6

Il costruttore di una classe non può essere ignorato dalle sue sottoclassi poiché un costruttore di due classi non può essere lo stesso.

Regola n. 7

Gestione delle eccezioni in sostituzione.

  • Il metodo Incase nella classe genitore non genera alcuna eccezione, quindi al metodo prioritario presente nella sottoclasse è consentito generare un'eccezione non selezionata. Nel caso in cui il metodo di override mostri un'eccezione verificata, il compilatore mostrerà un errore.
  • Se il metodo nella classe genitore che viene sottoposto a override genera un metodo di override tandem di eccezione presente nella sottoclasse, deve passare attraverso un'eccezione dello stesso livello o del suo sottotipo nella gerarchia delle eccezioni o nessuna eccezione.

Regola n. 8

È anche possibile ignorare il metodo nell'eredità multilivello.

Codice:

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

Produzione:

Regola n. 9

Sostituzione delle regole del metodo in Java

  • Un metodo sincronizzato può essere facilmente sostituito da un metodo non sincronizzato e viceversa.
  • Il metodo astratto presente in classi o interfacce astratte deve essere sovrascritto per fornire un'implementazione specifica ai metodi dichiarati, altrimenti mostrerà un errore di compilazione.
  • La definizione di un metodo statico con lo stesso nome di un metodo statico presente nella classe genitore è nota come metodo nascosto e non metodo prioritario in quanto non implementa il polimorfismo di runtime.
  • I metodi finali non possono essere ignorati.

Regola n. 10

Sostituzione del metodo in C ++

La sostituzione del metodo in c plus si ottiene dichiarando un metodo come virtuale. Una parola chiave virtuale viene utilizzata per ottenere il polimorfismo di runtime in c ++. Mentre in Java tutte le funzioni sono di default considerate virtuali.

Regola n. 11

La sostituzione del metodo è diversa dal sovraccarico del metodo in quanto è un processo di polimorfismo di runtime mentre il sovraccarico e il metodo sono un esempio di polimorfismo in fase di compilazione. Nella sostituzione del metodo è obbligatorio mantenere invariata la firma del metodo. quando si apportano modifiche al tipo restituito dal metodo o all'elenco dei parametri, il compilatore lo considera come un sovraccarico del metodo.

Sostituzione del metodo Sovraccarico del metodo
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);
)
)

Produzione:

Quando utilizzare l'override del metodo?

Di seguito sono riportati i metodi di utilizzo di Sostituzione:

  • Le OOP forniscono una meravigliosa funzione di ereditarietà per formare una grande gerarchia tra superclasse e sottoclasse che va dalla specializzazione minore alla specializzazione maggiore.
  • Possiamo usare la superclasse per fornire un framework che può essere ereditato in tutte le sue sottoclassi e nelle sottoclassi che possiamo definire il diverso funzionamento di quei metodi? Ciò si ottiene sovrascrivendo la funzionalità in cui è possibile fornire funzioni specializzate alle sottoclassi init ereditate dai metodi.
  • Aiuta anche a fornire un framework per più classi fornendo una raccolta di variabili e il metodo che deve essere implementato in tutte le sue sottoclassi.

Conclusione

OOP, i concetti rendono il codice robusto e facile da riutilizzare quando vengono utilizzati in modo efficace. La funzione di override migliora l'utilizzo dell'ereditarietà per fornire l'implementazione specifica al metodo generico della classe genitore nelle sue sottoclassi. Questo utilizza il concetto di polimorfismo di runtime per innescare la corretta definizione del metodo. L'invio dinamico del metodo viene eseguito solo in fase di esecuzione che verifica il riferimento della classe che l'oggetto sta trattenendo per chiamare il metodo. Questa funzione è guidata attraverso varie regole e non si applica ai metodi statici. Siamo in grado di implementare l'override dei metodi in qualsiasi linguaggio orientato agli oggetti e rendere il nostro programma più veloce e affidabile.

Articoli consigliati

Questa è una guida per l'override negli OOP. Qui discutiamo di come funziona l'override negli OOP, quando usarlo e 11 regole con codici e output. Puoi anche consultare i nostri altri articoli correlati per saperne di più-

  1. Sostituzione in PHP
  2. Sostituzione in JavaScript
  3. Che cos'è OOP?
  4. Sostituzione del metodo in C #
  5. Esempi di sostituzione in Java
  6. Metodo statico JavaScript | Come lavorare con esempi

Categoria: