- Entendre el problema sense anul·lar el mètode
- Podem anul·lar el mètode estàtic?
- Sobrecàrrega del mètode vs. substitució del mètode
Si la subclasse (classe secundària) té el mateix mètode que es declara a la classe pare, es coneix com a substitució del mètode a Java .
En altres paraules, si una subclasse proporciona la implementació específica del mètode que ha estat declarada per una de les seves classes pare, es coneix com a substitució del mètode.
Ús de la substitució del mètode Java
- La substitució de mètodes s'utilitza per proporcionar la implementació específica d'un mètode que ja proporciona la seva superclasse.
- La substitució del mètode s'utilitza per al polimorfisme en temps d'execució
Regles per a la substitució del mètode Java
- El mètode ha de tenir el mateix nom que a la classe pare
- El mètode ha de tenir el mateix paràmetre que a la classe pare.
- Hi ha d'haver una relació IS-A (herència).
Entendre el problema sense anul·lar el mètode
Entenem el problema que podem trobar al programa si no fem servir la substitució de mètodes.
//Java Program to demonstrate why we need method overriding //Here, we are calling the method of parent class with child //class object. //Creating a parent class class Vehicle{ void run(){System.out.println('Vehicle is running');} } //Creating a child class class Bike extends Vehicle{ public static void main(String args[]){ //creating an instance of child class Bike obj = new Bike(); //calling the method with child class instance obj.run(); } }Prova-ho ara
Sortida:
Vehicle is running
El problema és que he de proporcionar una implementació específica del mètode run() a la subclasse, per això fem servir la substitució del mètode.
Exemple de substitució del mètode
En aquest exemple, hem definit el mètode d'execució a la subclasse tal com es defineix a la classe pare però té alguna implementació específica. El nom i el paràmetre del mètode són els mateixos, i hi ha una relació IS-A entre les classes, de manera que hi ha una substitució del mètode.
//Java Program to illustrate the use of Java Method Overriding //Creating a parent class. class Vehicle{ //defining a method void run(){System.out.println('Vehicle is running');} } //Creating a child class class Bike2 extends Vehicle{ //defining the same method as in the parent class void run(){System.out.println('Bike is running safely');} public static void main(String args[]){ Bike2 obj = new Bike2();//creating object obj.run();//calling method } }Prova-ho ara
Sortida:
Bike is running safely
Un exemple real de substitució del mètode Java
Penseu en un escenari en què el banc és una classe que proporciona funcionalitat per obtenir el tipus d'interès. No obstant això, el tipus d'interès varia segons els bancs. Per exemple, els bancs SBI, ICICI i AXIS podrien oferir una taxa d'interès del 8%, 7% i 9%.
La substitució del mètode Java s'utilitza principalment al polimorfisme en temps d'execució, que aprendrem a les pàgines següents.
//Java Program to demonstrate the real scenario of Java Method Overriding //where three classes are overriding the method of a parent class. //Creating a parent class. class Bank{ int getRateOfInterest(){return 0;} } //Creating child classes. class SBI extends Bank{ int getRateOfInterest(){return 8;} } class ICICI extends Bank{ int getRateOfInterest(){return 7;} } class AXIS extends Bank{ int getRateOfInterest(){return 9;} } //Test class to create objects and call the methods class Test2{ public static void main(String args[]){ SBI s=new SBI(); ICICI i=new ICICI(); AXIS a=new AXIS(); System.out.println('SBI Rate of Interest: '+s.getRateOfInterest()); System.out.println('ICICI Rate of Interest: '+i.getRateOfInterest()); System.out.println('AXIS Rate of Interest: '+a.getRateOfInterest()); } }Prova-ho ara
Output: SBI Rate of Interest: 8 ICICI Rate of Interest: 7 AXIS Rate of Interest: 9
Podem anul·lar el mètode estàtic?
No, un mètode estàtic no es pot anul·lar. Es pot demostrar mitjançant el polimorfisme en temps d'execució, així que ho aprendrem més endavant.
Per què no podem anul·lar el mètode estàtic?
És perquè el mètode estàtic està lligat amb una classe, mentre que el mètode d'instància està lligat amb un objecte. L'estàtic pertany a l'àrea de classe i una instància pertany a l'àrea de l'heap.
Podem anul·lar el mètode principal de Java?
No, perquè el principal és un mètode estàtic.
Diferència entre la sobrecàrrega de mètodes i la substitució de mètodes a Java
Feu clic a mi per veure la diferència entre sobrecàrrega de mètodes i anul·lació
Més temes sobre la substitució de mètodes (no per a principiants)
Anulació de mètodes amb modificador d'accésVegem el concepte de substitució del mètode amb el modificador d'accés.
Gestió d'excepcions amb substitució de mètodesVegem el concepte de substitució del mètode amb el maneig d'excepcions.