logo

Podemos substituir o método estático em Java?

Em Java, substituindo e sobrecarga são as duas características mais importantes programação orientada a objetos . O recurso é usado quando o programador deseja alcançar polimorfismo . A questão, podemos substituir o método estático em Java ou você pode sobrecarregar o método estático em Java são as duas perguntas mais importantes feitas em Entrevista Java . Nesta seção, entenderemos resumidamente a sobrecarga e a substituição. Também explicamos a resposta de por que não podemos substituir o método estático em Java?

Método Estático

O método que possui uma palavra-chave estática antes do nome do método é conhecido como método estático . Também é conhecido como método em nível de classe . Uma cópia do método estático é compartilhada por todos os objetos da classe.

 public static int sum() { } 

Podemos invocar métodos estáticos usando o nome da classe. Por exemplo, Matemática.abs(a) método . O método retorna o valor absoluto do argumento passado. O método estático não pode acessar variáveis ​​ou métodos de instância.

Substituição de método

É uma característica programação orientada a objetos . É usado para obter polimorfismo em tempo de execução. A subclasse fornece uma implementação específica de um método que já é fornecido pela sua classe pai, conhecida como substituição de método. A assinatura do método nas classes pai e filho deve ser a mesma. Em substituição de método , qual método será executado, decidido em tempo de execução. A decisão é tomada de acordo com o objeto que chamamos.

Sobrecarga de método

É também um recurso da programação orientada a objetos. É usado para obter polimorfismo em tempo de compilação. Isso nos permite usar o mesmo nome de método, mas assinaturas diferentes. Se uma classe tiver mais de um método com o mesmo nome, mas com assinatura de método diferente, ela é conhecida como sobrecarga de método .

Aprendemos o que está sobrecarregando e sobrecarregando. Agora vamos direto ao ponto.

Podemos sobrecarregar um método estático?

A resposta é Sim . Podemos sobrecarregar métodos estáticos. Mas lembre-se que a assinatura do método deve ser diferente. Por exemplo, considere o seguinte programa Java.

SobrecargaStaticMethodExample1.java

 public class OverloadStaticMethodExample1 { //static method public static void display() { System.out.println('Static method called.'); } //overloaded static method public static void display(int x) { System.out.println('An overloaded static method called.'); } //main method public static void main(String args[]) { //calling static method by using the class name OverloadStaticMethodExample1.display(); OverloadStaticMethodExample1.display(160); } } 

Saída:

 Static method called. An overloaded static method called. 

Aqui surge uma questão que podemos sobrecarregar os métodos se eles forem diferentes apenas pela palavra-chave estática.

A resposta é Não. Não podemos substituir dois métodos se eles diferirem apenas pela palavra-chave estática. Por exemplo, considere o seguinte programa Java.

SobrecargaStaticMethodExample2.java

 public class OverloadStaticMethodExample2 { //static method public static void sum(int a, int b) { int c=a+b; System.out.println('The sum is: '+c); } //non-static method public void sum(int a, int b) { int c=a+b; System.out.println('The sum is: '+c); } //main method public static void main(String args[]) { //calling static method by using the class name OverloadStaticMethodExample2.sum(12, 90); } } 

Quando compilamos o programa acima, ele mostra o seguinte erro.

 error: method sum(int,int) is already defined in class OverloadStaticMethodExample2 

Podemos substituir um método estático?

Não, não podemos substituir métodos estáticos porque a substituição de métodos é baseada em ligação dinâmica em tempo de execução e os métodos estáticos são ligados usando ligação estática em tempo de compilação. Portanto, não podemos substituir métodos estáticos.

A chamada do método depende do tipo de objeto que chama o método estático. Isso significa:

  • Se chamarmos um método estático usando o objeto da classe pai, o método estático original será chamado a partir da classe pai.
  • Se chamarmos um método estático usando o objeto da classe filha, o método estático da classe filha será chamado.

No exemplo a seguir, ParentClass possui um método estático chamado display() e ChildClass também possui a mesma assinatura de método. O método na classe derivada (ChildClass) oculta o método na classe base. vamos ver um exemplo.

SobrecargaStaticMethodExample3.java

 public class OverloadStaticMethodExample3 { public static void main(String args[]) { ParentClass pc = new ChildClass(); //calling display() method by parent class object pc.display(); } } //parent class class ParentClass { //we cannot override the display() method public static void display() { System.out.printf('display() method of the parent class.'); } } //child class class ChildClass extends ParentClass { //the same method also exists in the ParentClass //it does not override, actually it is method hiding public static void display() { System.out.println('Overridden static method in Child Class in Java'); } } 

Saída:

 display() method of the parent class.