logo

Môžeme prepísať statickú metódu v Jave?

v Jave prvoradé a preťaženie sú dve najdôležitejšie vlastnosti objektovo orientované programovanie . Funkcia sa používa, keď chce programátor dosiahnuť polymorfizmus . Otázka, môžeme prepísať statickú metódu v Jave alebo môžete preťažiť statickú metódu v jazyku Java sú dve najdôležitejšie otázky Java rozhovor . V tejto časti v skratke pochopíme preťaženie a prepisovanie. Vysvetlili sme aj odpoveď o prečo nemôžeme prepísať statickú metódu v Jave?

Statická metóda

Metóda, ktorá má pred názvom metódy statické kľúčové slovo, je známa ako a statická metóda . Je tiež známy ako a metóda na úrovni triedy . Kópiu statickej metódy zdieľajú všetky objekty triedy.

 public static int sum() { } 

Pomocou názvu triedy môžeme vyvolať statické metódy. Napríklad, Math.abs(a) metóda . Metóda vráti absolútnu hodnotu odovzdaného argumentu. Statická metóda nemôže pristupovať k premenným alebo metódam inštancie.

Prepísanie metódy

Je to vlastnosť objektovo orientované programovanie . Používa sa na dosiahnutie polymorfizmu za behu. Podtrieda poskytuje špecifickú implementáciu metódy, ktorú už poskytuje jej rodičovská trieda, známa ako prepísanie metódy. Podpis metódy v rodičovskej a podradenej triede musí byť rovnaký. In prepísanie metódy , ktorá metóda sa má vykonať, sa rozhodne za behu. Rozhoduje sa podľa objektu, ktorý sme zavolali.

Preťaženie metódy

Je to tiež vlastnosť objektovo orientovaného programovania. Používa sa na dosiahnutie polymorfizmu v čase kompilácie. Umožňuje nám použiť rovnaký názov metódy, ale rôzne podpisy. Ak má trieda viac ako jednu metódu s rovnakým názvom, ale odlišným podpisom metódy, je známa ako preťaženie metódy .

Naučili sme sa, čo je preťaženie a prvoradé. Teraz prejdeme k veci.

Môžeme preťažiť statickú metódu?

Odpoveď je Áno . Statické metódy môžeme preťažiť. Pamätajte však, že podpis metódy musí byť odlišný. Zvážte napríklad nasledujúci 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); } } 

Výkon:

 Static method called. An overloaded static method called. 

Tu vzniká otázka, že môžeme preťažiť metódy, ak sa líšia iba statickým kľúčovým slovom.

Odpoveď je Nie Nemôžeme prepísať dve metódy, ak sa líšia iba statickým kľúčovým slovom. Zvážte napríklad nasledujúci 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); } } 

Keď skompilujeme vyššie uvedený program, zobrazí sa nasledujúca chyba.

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

Môžeme prepísať statickú metódu?

nie, statické metódy nemôžeme prepísať, pretože prepísanie metódy je založené na dynamickej väzbe za behu a statické metódy sú spojené pomocou statickej väzby v čase kompilácie. Nemôžeme teda prepísať statické metódy.

Volanie metódy závisí od typu objektu, ktorý volá statickú metódu. To znamená:

  • Ak zavoláme statickú metódu pomocou objektu rodičovskej triedy, pôvodná statická metóda bude volaná z rodičovskej triedy.
  • Ak zavoláme statickú metódu pomocou objektu podradenej triedy, zavolá sa statická metóda podradenej triedy.

V nasledujúcom príklade má ParentClass statickú metódu s názvom display() a ChildClass má tiež rovnaký podpis metódy. Metóda v odvodenej triede (ChildClass) skryje metódu v základnej triede. pozrime sa na príklad.

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

Výkon:

 display() method of the parent class.