logo

Czy możemy zastąpić metodę statyczną w Javie?

na Jawie, nadrzędny I przeciążanie to dwie najważniejsze cechy programowanie obiektowe . Cecha jest używana, gdy programista chce osiągnąć wielopostaciowość . Pytanie, czy możemy zastąpić metodę statyczną w Javie Lub czy możesz przeciążyć metodę statyczną w Javie to dwa najważniejsze pytania zadawane w Wywiad w Javie . W tej sekcji w skrócie omówimy przeciążenie i przesłanianie. Wyjaśniliśmy również odpowiedź dlaczego nie możemy zastąpić metody statycznej w Javie?

Metoda statyczna

Metoda, która ma static słowo kluczowe przed nazwą metody, jest znana jako a metoda statyczna . Znany jest również jako metoda na poziomie klasy . Kopia metody statycznej jest współdzielona przez wszystkie obiekty klasy.

 public static int sum() { } 

Metody statyczne możemy wywoływać, używając nazwy klasy. Na przykład, Math.abs(a) metoda . Metoda zwraca wartość bezwzględną przekazanego argumentu. Metoda statyczna nie może uzyskać dostępu do zmiennych ani metod instancji.

Zastępowanie metody

Jest to cecha programowanie obiektowe . Służy do osiągnięcia polimorfizmu w czasie wykonywania. Podklasa zapewnia specyficzną implementację metody, która jest już dostarczona przez jej klasę nadrzędną, znaną jako nadpisanie metody. Sygnatura metody w klasie nadrzędnej i podrzędnej musi być taka sama. W nadpisanie metody , która metoda ma zostać wykonana, jest ustalana w czasie wykonywania. Decyzja jest podejmowana w zależności od obiektu, który nazwaliśmy.

Przeciążenie metody

Jest to także cecha programowania obiektowego. Służy do osiągnięcia polimorfizmu w czasie kompilacji. Pozwala nam to używać tej samej nazwy metody, ale różnych podpisów. Jeśli klasa ma więcej niż jedną metodę o tej samej nazwie, ale innej sygnaturze metody, nazywa się to przeciążanie metody .

Dowiedzieliśmy się, co jest przeciążeniem i nadrzędnością. Teraz przechodzimy do rzeczy.

Czy możemy przeciążyć metodę statyczną?

Odpowiedź to Tak . Możemy przeciążać metody statyczne. Pamiętaj jednak, że sygnatura metody musi być inna. Rozważmy na przykład następujący program Java.

OverloadStaticMethodExample1.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); } } 

Wyjście:

 Static method called. An overloaded static method called. 

Tutaj pojawia się pytanie, że czy możemy przeciążać metody, jeśli różnią się one tylko statycznym słowem kluczowym.

Odpowiedź to NIE. Nie możemy przesłonić dwóch metod, jeśli różnią się one jedynie statycznym słowem kluczowym. Rozważmy na przykład następujący program Java.

OverloadStaticMethodExample2.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); } } 

Kiedy kompilujemy powyższy program, pokazuje następujący błąd.

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

Czy możemy zastąpić metodę statyczną?

NIE, nie możemy zastąpić metod statycznych, ponieważ przesłanianie metod opiera się na dynamicznym wiązaniu w czasie wykonywania, a metody statyczne są łączone przy użyciu statycznego wiązania w czasie kompilacji. Nie możemy więc zastąpić metod statycznych.

Wywołanie metody zależy od typu obiektu wywołującego metodę statyczną. To znaczy:

  • Jeśli wywołamy metodę statyczną przy użyciu obiektu klasy nadrzędnej, oryginalna metoda statyczna zostanie wywołana z klasy nadrzędnej.
  • Jeśli wywołamy metodę statyczną przy użyciu obiektu klasy podrzędnej, zostanie wywołana metoda statyczna klasy podrzędnej.

W poniższym przykładzie klasa ParentClass ma metodę statyczną o nazwie display(), a klasa ChildClass ma również tę samą sygnaturę metody. Metoda w klasie pochodnej (ChildClass) ukrywa metodę w klasie bazowej. zobaczmy przykład.

OverloadStaticMethodExample3.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'); } } 

Wyjście:

 display() method of the parent class.