Cos'è il polimorfismo in Java?
Il polimorfismo in Java si verifica quando sono presenti una o più classi o oggetti correlati tra loro per ereditarietà. In altre parole, è la capacità di un oggetto di assumere molte forme. L'ereditarietà consente agli utenti di ereditare attributi e metodi e il polimorfismo utilizza questi metodi per eseguire attività diverse. Quindi, l'obiettivo è la comunicazione ma l'approccio è diverso.
Ad esempio, hai uno smartphone per la comunicazione. La modalità di comunicazione che scegli potrebbe essere qualsiasi cosa. Può essere una chiamata, un messaggio di testo, un messaggio con disegno, una mail, ecc. Quindi l'obiettivo è comune che è la comunicazione, ma il loro approccio è diverso. Questo si chiama polimorfismo.
In questo tutorial imparerai-
- Cos'è il polimorfismo?
- Polimorfismo Java in OOP con esempio
- Sostituzione del metodo
- Differenza tra sovraccarico e sovrascrittura
- Cos'è il polimorfismo dinamico?
- Super parola chiave
- Differenza tra polimorfismo statico e dinamico
Fare clic qui se il video non è accessibile
Polimorfismo Java in OOP con esempio
Abbiamo una classe genitore, "Conto" con funzione di deposito e prelievo. Il conto ha 2 classi figlio L'operazione di deposito e prelievo è la stessa per i conti di risparmio e di controllo. Quindi i metodi ereditati dalla classe Account funzioneranno.Modifica dei requisiti software
C'è un cambiamento nella specifica dei requisiti, qualcosa che è così comune nell'industria del software. Dovresti aggiungere la funzionalità Conto bancario privilegiato con la funzione di scoperto.
Per uno sfondo, lo scoperto è una struttura in cui è possibile prelevare un importo superiore a quello disponibile sul saldo del proprio conto.
Quindi, ritira il metodo per le esigenze privilegiate da implementare di nuovo. Ma non si modifica la parte di codice testata in Conto di risparmio e controllo. Questo è un vantaggio di OOPS
Passaggio 1) Tale che quando viene chiamato il metodo "ritirato" per il salvataggio del conto viene eseguito un metodo dalla classe del conto genitore.
Passaggio 2) Ma quando viene chiamato il metodo "Prelievo" per l'account privilegiato (possibilità di scoperto) viene eseguito il metodo di prelievo definito nella classe privilegiata. Questo è il polimorfismo.
Sostituzione del metodo
L'override del metodo sta ridefinendo un metodo di una super classe in una sottoclasse.
Regole per l'override del metodo
- La firma del metodo, ovvero il nome del metodo, l'elenco dei parametri e il tipo restituito, devono corrispondere esattamente.
- Il metodo sovrascritto può ampliare l'accessibilità ma non restringerla, cioè se è privato nella classe base, la classe figlia può renderla pubblica ma non viceversa.
Esempio
class Doctor{public void treatPatient(){// treatPatient method}class Surgeon extends Doctor{public void treatPatient(){// treatPatient method}}Class run{public static void main (String args[]){Doctor doctorObj = new Doctor()// treatPatient method in class Doctor will be executeddoctorObj.treatPatient();Surgeon surgeonObj = new Surgeon();// treatPatient method in class Surgeon will be executedsurgeonObj.treatPatient();}}
Differenza tra sovraccarico e sovrascrittura
Sovraccarico del metodo | Sostituzione del metodo |
---|---|
Il sovraccarico del metodo si trova nella stessa classe, dove più metodi hanno lo stesso nome ma firme diverse. |
L'override del metodo è quando uno dei metodi nella super classe viene ridefinito nella sottoclasse. In questo caso, la firma del metodo rimane la stessa. |
Ex: void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b); |
Ex: class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}} |
Cos'è il polimorfismo dinamico?
Il polimorfismo dinamico è il meccanismo mediante il quale è possibile definire più metodi con lo stesso nome e firma nella superclasse e nella sottoclasse. La chiamata a un metodo sottoposto a override viene risolta in fase di esecuzione.
Esempio di polimorfismo dinamico:
Una variabile di riferimento della superclasse può fare riferimento a un oggetto di sottoclasse
Doctor obj = new Surgeon();
Considera l'affermazione
obj.treatPatient();
Qui la variabile di riferimento "obj" è della classe genitore, ma l'oggetto a cui punta è della classe figlia (come mostrato nel diagramma).
obj.treatPatient () eseguirà il metodo treatPatient () della sottoclasse - Chirurgo
Se un riferimento alla classe base viene utilizzato per chiamare un metodo, il metodo da invocare viene deciso dalla JVM, a seconda dell'oggetto a cui punta il riferimento
Ad esempio, anche se obj è un riferimento a Doctor, chiama il metodo di Surgeon, poiché punta a un oggetto Surgeon
Questo viene deciso durante il tempo di esecuzione e quindi definito polimorfismo dinamico o di tempo di esecuzione
Super parola chiave
Cosa succede se il metodo treatPatient nella classe Surgeon desidera eseguire la funzionalità definita nella classe Doctor e quindi eseguire la propria funzionalità specifica?
In questo caso, parola chiave
super
può essere utilizzato per accedere ai metodi della classe genitore dalla classe figlia.Il metodo treatPatient nella classe Surgeon potrebbe essere scritto come:
treatPatient(){super.treatPatient();//add code specific to Surgeon}
La parola chiave super può essere utilizzata per accedere a qualsiasi membro di dati o metodi della super classe nella sottoclasse.Esempio: -Per imparare l'ereditarietà, il polimorfismo e la parola chiave super
Passaggio 1) Copia il codice seguente in un editor
public class Test{public static void main(String args[]){X x= new X();Y y = new Y();y.m2();//x.m1();//y.m1();//x = y;// parent pointing to object of child//x.m1() ;//y.a=10;}}class X{private int a;int b;public void m1(){System.out.println("This is method m1 of class X");}}class Y extends X{int c; // new instance variable of class Ypublic void m1(){// overriden methodSystem.out.println("This is method m1 of class Y");}public void m2(){super.m1();System.out.println("This is method m2 of class Y");}}
Passaggio 2) Salva, compila ed esegui il codice. Osserva l'output.
Passaggio 3) Annulla il commento alle righe 6-9. Salva, compila ed esegui il codice. Osserva l'output.
Passaggio 4) Rimuovere il commento dalla riga n.10. Salva e compila il codice.
Passaggio 5) Errore =? Questo perché la sottoclasse non può accedere ai membri privati della superclasse.
Differenza tra polimorfismo statico e dinamico
Polimorfismo statico | Polimorfismo dinamico |
---|---|
Si riferisce al sovraccarico del metodo. | Si riferisce alla sostituzione del metodo. |
Gli eventuali errori vengono risolti in fase di compilazione. Poiché il codice non viene eseguito durante la compilazione, da qui il nome static. Ex: void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error. |
Nel caso in cui una variabile di riferimento stia chiamando un metodo sovrascritto, il metodo da invocare è determinato dall'oggetto, a cui punta la variabile di riferimento. Questo può essere determinato solo in fase di esecuzione quando il codice è in esecuzione, da cui il nome dinamico. Ex: //reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient(); |