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.