logo

Ali lahko v Javi preglasimo statično metodo?

V Javi, prevladujoče in preobremenitev sta dve najpomembnejši značilnosti objektno orientirano programiranje . Funkcija se uporablja, ko programer želi doseči polimorfizem . Vprašanje, ali lahko preglasimo statično metodo v Javi oz ali lahko preobremenite statično metodo v Javi sta dve najpomembnejši vprašanji, zastavljeni v Java intervju . V tem razdelku bomo na kratko razumeli preobremenitev in preglasitev. Pojasnili smo tudi odgovor zakaj ne moremo preglasiti statične metode v Javi?

Statična metoda

Metoda, ki ima statično ključno besedo pred imenom metode, je znana kot a statična metoda . Znan je tudi kot a razredna metoda . Kopijo statične metode si delijo vsi objekti razreda.

 public static int sum() { } 

Statične metode lahko prikličemo z uporabo imena razreda. na primer Math.abs(a) metoda . Metoda vrne absolutno vrednost posredovanega argumenta. Statična metoda ne more dostopati do spremenljivk ali metod primerka.

Preglasitev metode

To je značilnost objektno orientirano programiranje . Uporablja se za doseganje polimorfizma med izvajanjem. Podrazred zagotavlja specifično implementacijo metode, ki jo že zagotavlja njegov nadrejeni razred, znan kot preglasitev metode. Podpis metode v nadrejenem in podrejenem razredu mora biti enak. notri preglasitev metode , katero metodo je treba izvesti, se odloči med izvajanjem. Odločitev je sprejeta glede na objekt, ki smo ga poklicali.

Preobremenitev metode

Je tudi lastnost objektno usmerjenega programiranja. Uporablja se za doseganje polimorfizma v času prevajanja. Omogoča nam uporabo istega imena metode, vendar različnih podpisov. Če ima razred več kot eno metodo z enakim imenom, vendar različnim podpisom metode, je znan kot preobremenitev metode .

Naučili smo se, kaj je preobremenitveno in prevladujoče. Zdaj pa preidimo k bistvu.

Ali lahko preobremenimo statično metodo?

Odgovor je ja . Statične metode lahko preobremenimo. Vendar ne pozabite, da mora biti podpis metode drugačen. Na primer, razmislite o naslednjem programu 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); } } 

Izhod:

 Static method called. An overloaded static method called. 

Tukaj se postavlja vprašanje, da ali lahko preobremenimo metode, če se razlikujejo le po statični ključni besedi.

Odgovor je št. Ne moremo preglasiti dveh metod, če se razlikujeta le po statični ključni besedi. Na primer, razmislite o naslednjem programu 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); } } 

Ko prevedemo zgornji program, prikaže naslednjo napako.

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

Ali lahko preglasimo statično metodo?

ne, ne moremo preglasiti statičnih metod, ker preglasitev metode temelji na dinamičnem povezovanju v času izvajanja, statične metode pa so povezane s statično vezavo v času prevajanja. Torej ne moremo preglasiti statičnih metod.

Klic metode je odvisen od vrste objekta, ki kliče statično metodo. To pomeni:

  • Če pokličemo statično metodo z uporabo objekta nadrejenega razreda, bo izvirna statična metoda poklicana iz nadrejenega razreda.
  • Če pokličemo statično metodo z uporabo objekta podrejenega razreda, bo poklicana statična metoda podrejenega razreda.

V naslednjem primeru ima ParentClass statično metodo z imenom display() in ChildClass ima prav tako isti podpis metode. Metoda v izpeljanem razredu (ChildClass) skrije metodo v osnovnem razredu. poglejmo primer.

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

Izhod:

 display() method of the parent class.