- Entendendo o problema sem substituir o método
- Podemos substituir o método estático
- Sobrecarga de método vs. substituição de método
Se a subclasse (classe filha) tiver o mesmo método declarado na classe pai, ela é conhecida como substituição de método em Java .
Em outras palavras, se uma subclasse fornece a implementação específica do método que foi declarado por uma de suas classes pai, isso é conhecido como substituição de método.
Uso de substituição de método Java
- A substituição de método é usada para fornecer a implementação específica de um método que já é fornecido por sua superclasse.
- A substituição de método é usada para polimorfismo de tempo de execução
Regras para substituição de método Java
- O método deve ter o mesmo nome da classe pai
- O método deve ter o mesmo parâmetro da classe pai.
- Deve haver um relacionamento IS-A (herança).
Entendendo o problema sem substituir o método
Vamos entender o problema que podemos enfrentar no programa se não usarmos a substituição de métodos.
//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(); } }Teste agora
Saída:
Vehicle is running
O problema é que preciso fornecer uma implementação específica do método run() na subclasse, por isso usamos a substituição de método.
Exemplo de substituição de método
Neste exemplo, definimos o método run na subclasse conforme definido na classe pai, mas ele possui alguma implementação específica. O nome e o parâmetro do método são iguais e existe um relacionamento IS-A entre as classes, portanto, há substituição de método.
//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 } }Teste agora
Saída:
Bike is running safely
Um exemplo real de substituição de método Java
Considere um cenário onde Bank é uma classe que fornece funcionalidade para obter a taxa de juros. No entanto, a taxa de juros varia de acordo com os bancos. Por exemplo, os bancos SBI, ICICI e AXIS poderiam fornecer taxas de juros de 8%, 7% e 9%.
A substituição do método Java é usada principalmente no polimorfismo de tempo de execução, que aprenderemos nas próximas páginas.
//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()); } }Teste agora
Output: SBI Rate of Interest: 8 ICICI Rate of Interest: 7 AXIS Rate of Interest: 9
Podemos substituir o método estático?
Não, um método estático não pode ser substituído. Isso pode ser provado pelo polimorfismo de tempo de execução, então aprenderemos mais tarde.
Por que não podemos substituir o método estático?
É porque o método estático está vinculado à classe, enquanto o método de instância está vinculado a um objeto. Static pertence à área de classe e uma instância pertence à área de heap.
Podemos substituir o método principal java?
Não, porque o main é um método estático.
Diferença entre sobrecarga de método e substituição de método em java
Clique em mim para saber a diferença entre sobrecarga e substituição de método
Mais tópicos sobre substituição de método (não para iniciantes)
Substituição de método com modificador de acessoVamos ver o conceito de substituição de método com modificador de acesso.
Tratamento de exceções com substituição de métodoVamos ver o conceito de substituição de método com tratamento de exceções.