logo

Можем ли да заменим статичния метод в Java?

В Java, надделяващ и претоварване са двете най-важни характеристики на обектно-ориентирано програмиране . Функцията се използва, когато програмистът иска да постигне полиморфизъм . Въпроса, можем ли да заменим статичния метод в Java или можете ли да претоварите статичен метод в Java са двата най-важни въпроса, зададени в Java интервю . В този раздел ще разберем накратко претоварването и отмяната. Обяснихме и отговора на защо не можем да заменим статичния метод в Java?

Статичен метод

Методът, който има статична ключова дума преди името на метода, е известен като a статичен метод . Известен е още като a метод на ниво клас . Копие на статичния метод се споделя от всички обекти на класа.

 public static int sum() { } 

Можем да извикаме статични методи, като използваме името на класа. Например, Math.abs(a) метод . Методът връща абсолютната стойност на предадения аргумент. Статичният метод няма достъп до променливи или методи на екземпляр.

Замяна на метода

То е характеристика на обектно-ориентирано програмиране . Използва се за постигане на полиморфизъм по време на изпълнение. Подкласът предоставя специфична реализация на метод, който вече е предоставен от неговия родителски клас, известен като отмяна на метода. Сигнатурата на метода в родителския и дъщерния клас трябва да бъде еднаква. в отмяна на метода , кой метод трябва да бъде изпълнен, решен по време на изпълнение. Решението се взема според обекта, който извикахме.

Претоварване на метода

Това също е характеристика на обектно-ориентираното програмиране. Използва се за постигане на полиморфизъм по време на компилиране. Това ни позволява да използваме едно и също име на метод, но различни подписи. Ако един клас има повече от един метод със същото име, но различен подпис на метода, той е известен като претоварване на метода .

Научихме какво е претоварващо и надделяващо. Сега преминаваме към точката.

Можем ли да претоварим статичен метод?

Отговорът е да . Можем да претоварим статичните методи. Но не забравяйте, че сигнатурата на метода трябва да е различна. Например, разгледайте следната програма на 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); } } 

Изход:

 Static method called. An overloaded static method called. 

Тук възниква един въпрос, че можем ли да претоварим методите, ако те се различават само по статична ключова дума.

Отговорът е Не. Не можем да отменим два метода, ако се различават само по статична ключова дума. Например, разгледайте следната програма на 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); } } 

Когато компилираме горната програма, тя показва следната грешка.

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

Можем ли да заменим статичен метод?

Не, не можем да отменим статичните методи, тъй като отмяната на метода се основава на динамично обвързване по време на изпълнение, а статичните методи се свързват чрез статично обвързване по време на компилиране. Така че не можем да отменим статичните методи.

Извикването на метод зависи от типа обект, който извиква статичния метод. Това означава:

  • Ако извикаме статичен метод, като използваме обекта на родителския клас, оригиналният статичен метод ще бъде извикан от родителския клас.
  • Ако извикаме статичен метод, като използваме обекта на дъщерния клас, ще бъде извикан статичният метод на дъщерния клас.

В следващия пример ParentClass има статичен метод с име display() и ChildClass също има същия подпис на метода. Методът в производния клас (ChildClass) скрива метода в основния клас. нека видим пример.

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

Изход:

 display() method of the parent class.