logo

Felülírhatjuk a statikus módszert a Java-ban?

Java nyelven, felülírva és túlterhelés a két legfontosabb jellemzője objektumorientált programozás . A funkció akkor használatos, ha a programozó el akarja érni polimorfizmus . A kérdés, felülbírálhatjuk-e a statikus metódust Java-ban vagy túlterhelheti a statikus metódust Java-ban ez a két legfontosabb kérdés Java interjú . Ebben a részben a túlterhelést és a felülírást fogjuk röviden megérteni. A választ is kifejtettük miért nem tudjuk felülírni a statikus metódust Java-ban?

Statikus módszer

Az a metódus, amelynek a metódus neve előtt statikus kulcsszó van, a statikus módszer . Más néven a osztály szintű módszer . A statikus metódus egy példányát az osztály összes objektuma megosztja.

 public static int sum() { } 

Statikus metódusokat hívhatunk meg az osztálynév használatával. Például, Math.abs(a) módszer . A metódus az átadott argumentum abszolút értékét adja vissza. A statikus metódus nem fér hozzá a példányváltozókhoz vagy metódusokhoz.

Módszer felülbírálása

Ez egy jellemzője objektumorientált programozás . Futásidejű polimorfizmus elérésére használják. Az alosztály egy olyan metódus speciális megvalósítását biztosítja, amelyet a szülőosztálya, az úgynevezett módszer felülbírálása. A metódus aláírásának a szülő és a gyermek osztályban meg kell egyeznie. Ban ben módszer felülbírálása , hogy melyik metódust kell végrehajtani, a futási időben dől el. A döntés az általunk hívott objektum szerint történik.

Módszer Túlterhelés

Ez is az objektum-orientált programozás jellemzője. Fordítási idejű polimorfizmus elérésére használják. Lehetővé teszi, hogy ugyanazt a metódusnevet használjuk, de különböző aláírásokat. Ha egy osztálynak több metódusa is van azonos névvel, de eltérő metódusaláírással, akkor az úgynevezett módszer túlterhelése .

Megtanultuk, mi a túlterhelt és a túlnyomó. Most térjünk át a lényegre.

Túlterhelhetünk egy statikus metódust?

A válasz Igen . A statikus módszereket túlterhelhetjük. De ne feledje, hogy a metódus aláírásának másnak kell lennie. Vegyük például a következő Java programot.

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

Kimenet:

 Static method called. An overloaded static method called. 

Itt felmerül egy kérdés, hogy túlterhelhetjük-e a metódusokat, ha csak statikus kulcsszó szerint különböznek egymástól.

A válasz Nem. Nem írhatunk felül két módszert, ha csak statikus kulcsszóban különböznek egymástól. Vegyük például a következő Java programot.

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

Amikor a fenti programot lefordítjuk, a következő hibát mutatja.

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

Felülírhatunk egy statikus metódust?

Nem, A statikus módszereket nem tudjuk felülbírálni, mert a metódusok felülbírálása a futásidejű dinamikus kötésen alapul, a statikus metódusok pedig statikus kötés segítségével vannak összekapcsolva a fordítási időben. Tehát nem írhatjuk felül a statikus módszereket.

A metódus hívása attól függ, hogy milyen típusú objektum hívja meg a statikus metódust. Azt jelenti:

  • Ha egy statikus metódust a szülő osztály objektum használatával hívunk meg, akkor az eredeti statikus metódust a szülő osztályból hívjuk meg.
  • Ha egy statikus metódust hívunk meg a gyermekosztály objektum használatával, akkor a gyermekosztály statikus metódusa kerül meghívásra.

A következő példában a ParentClass statikus metódussal rendelkezik display() néven, és a ChildClass is ugyanazzal a metódus aláírással rendelkezik. A származtatott osztály (ChildClass) metódusa elrejti a metódust az alaposztályban. lássunk egy példát.

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

Kimenet:

 display() method of the parent class.