logo

Můžeme přepsat statickou metodu v Javě?

v Javě, prvořadé a přetěžování jsou dvě nejdůležitější vlastnosti objektově orientované programování . Funkce se používá, když chce programátor dosáhnout polymorfismus . Otázka, můžeme přepsat statickou metodu v Javě nebo můžete přetížit statickou metodu v Javě jsou dvě nejdůležitější otázky Java rozhovor . V této části stručně pochopíme přetěžování a přepisování. Odpověď jsme také vysvětlili proč nemůžeme přepsat statickou metodu v Javě?

Statická metoda

Metoda, která má před názvem metody statické klíčové slovo, se nazývá a statická metoda . Je také známý jako a metoda na úrovni třídy . Kopie statické metody je sdílena všemi objekty třídy.

 public static int sum() { } 

Můžeme vyvolat statické metody pomocí názvu třídy. Například, Math.abs(a) metoda . Metoda vrací absolutní hodnotu předaného argumentu. Statická metoda nemůže přistupovat k proměnným nebo metodám instance.

Přepsání metody

Je to vlastnost objektově orientované programování . Používá se k dosažení polymorfismu za běhu. Podtřída poskytuje specifickou implementaci metody, která je již poskytována její rodičovskou třídou, známou jako přeřazení metody. Podpis metody v nadřazené a podřízené třídě musí být stejný. v přeřazení metody , která metoda má být provedena, rozhodnuto za běhu. Rozhoduje se podle objektu, který jsme volali.

Přetížení metody

Je to také vlastnost objektově orientovaného programování. Používá se k dosažení polymorfismu v době kompilace. Umožňuje nám používat stejný název metody, ale různé signatury. Pokud má třída více než jednu metodu se stejným názvem, ale odlišnou signaturou metody, je známá jako přetížení metody .

Naučili jsme se, co je přetěžující a prvořadé. Nyní přejdeme k věci.

Můžeme přetížit statickou metodu?

Odpověď je Ano . Statické metody můžeme přetížit. Pamatujte však, že podpis metody musí být jiný. Zvažte například následující 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ýstup:

 Static method called. An overloaded static method called. 

Zde se nabízí otázka můžeme přetížit metody, pokud se liší pouze statickým klíčovým slovem.

Odpověď je Ne. Nemůžeme přepsat dvě metody, pokud se liší pouze statickým klíčovým slovem. Zvažte například následující 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); } } 

Když zkompilujeme výše uvedený program, zobrazí se následující chyba.

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

Můžeme přepsat statickou metodu?

Ne, nemůžeme přepsat statické metody, protože přepsání metody je založeno na dynamické vazbě za běhu a statické metody jsou spojeny pomocí statické vazby v době kompilace. Nemůžeme tedy přepsat statické metody.

Volání metody závisí na typu objektu, který volá statickou metodu. To znamená:

  • Pokud zavoláme statickou metodu pomocí nadřazeného objektu třídy, bude původní statická metoda volána z nadřazené třídy.
  • Pokud zavoláme statickou metodu pomocí objektu podřízené třídy, bude zavolána statická metoda podřízené třídy.

V následujícím příkladu má ParentClass statickou metodu s názvem display() a ChildClass má také stejný podpis metody. Metoda v odvozené třídě (ChildClass) skryje metodu v základní třídě. podívejme se na pří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ýstup:

 display() method of the parent class.