logo

Чи можемо ми замінити статичний метод у Java?

На Java, переважний і перевантаження це дві найважливіші особливості об'єктно-орієнтоване програмування . Функція використовується, коли програміст хоче досягти поліморфізм . Питання, чи можемо ми перевизначити статичний метод у Java або чи можна перевантажити статичний метод у Java два найважливіші питання, які ставляться в Java співбесіда . У цьому розділі ми коротко розглянемо перевантаження та перевизначення. Ми також пояснили відповідь чому ми не можемо перевизначити статичний метод у Java?

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

Метод, який має ключове слово static перед назвою методу, відомий як 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.