logo

Voimmeko ohittaa staattisen menetelmän Javassa?

Javassa, ylivoimainen ja ylikuormitus ovat kaksi tärkeintä ominaisuutta olio-ohjelmointi . Ominaisuutta käytetään, kun ohjelmoija haluaa saavuttaa polymorfismi . Kysymys, voimmeko ohittaa staattisen menetelmän Javassa tai voitko ylikuormittaa staattista menetelmää Javassa ovat kaksi tärkeintä kysymystä Java haastattelu . Tässä osiossa ymmärrämme lyhyesti ylikuormituksen ja ohituksen. Olemme myös selittäneet vastauksen kysymykseen miksi emme voi ohittaa staattista menetelmää Javassa?

Staattinen menetelmä

Menetelmä, jossa on staattinen avainsana ennen menetelmän nimeä, tunnetaan nimellä a staattinen menetelmä . Se tunnetaan myös nimellä a luokkatason menetelmä . Staattisen menetelmän kopio jaetaan kaikille luokan objekteille.

 public static int sum() { } 

Voimme kutsua staattisia menetelmiä käyttämällä luokan nimeä. Esimerkiksi, Math.abs(a) menetelmä . Metodi palauttaa hyväksytyn argumentin absoluuttisen arvon. Staattinen menetelmä ei voi käyttää ilmentymän muuttujia tai menetelmiä.

Menetelmän ohittaminen

Se on ominaisuus olio-ohjelmointi . Sitä käytetään ajonaikaisen polymorfismin saavuttamiseen. Alaluokka tarjoaa tietyn toteutuksen menetelmälle, jonka sen pääluokka, joka tunnetaan nimellä menetelmän ohittaminen. Metodin allekirjoituksen ylä- ja alaluokassa on oltava sama. Sisään menetelmän ohittaminen , mikä menetelmä suoritetaan, päätetään ajon aikana. Päätös tehdään sen kohteen mukaan, jonka kutsuimme.

Menetelmän ylikuormitus

Se on myös olio-ohjelmoinnin ominaisuus. Sitä käytetään käännösajan polymorfismin saavuttamiseen. Sen avulla voimme käyttää samaa menetelmän nimeä, mutta erilaisia ​​​​allekirjoituksia. Jos luokassa on useampi kuin yksi menetelmä, jolla on sama nimi, mutta eri menetelmän allekirjoitus, se tunnetaan nimellä menetelmän ylikuormitus .

Olemme oppineet, mikä on ylikuormitusta ja ylikuormittavaa. Nyt siirrytään asiaan.

Voimmeko ylikuormittaa staattista menetelmää?

Vastaus on Joo . Voimme ylikuormittaa staattisia menetelmiä. Mutta muista, että menetelmän allekirjoituksen on oltava erilainen. Harkitse esimerkiksi seuraavaa Java-ohjelmaa.

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

Lähtö:

 Static method called. An overloaded static method called. 

Tästä herää kysymys voimmeko ylikuormittaa menetelmiä, jos ne eroavat vain staattisen avainsanan perusteella.

Vastaus on Ei. Emme voi ohittaa kahta menetelmää, jos ne eroavat vain staattisen avainsanan perusteella. Harkitse esimerkiksi seuraavaa Java-ohjelmaa.

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

Kun käännämme yllä olevan ohjelman, se näyttää seuraavan virheen.

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

Voimmeko ohittaa staattisen menetelmän?

Ei, emme voi ohittaa staattisia menetelmiä, koska menetelmän ohitus perustuu dynaamiseen sidokseen ajon aikana ja staattiset menetelmät sidotaan käyttämällä staattista sidontaa käännöshetkellä. Emme siis voi ohittaa staattisia menetelmiä.

Metodin kutsuminen riippuu objektityypistä, joka kutsuu staattista menetelmää. Se tarkoittaa:

  • Jos kutsumme staattista menetelmää käyttämällä emoluokan objektia, alkuperäinen staattinen menetelmä kutsutaan pääluokasta.
  • Jos kutsumme staattista menetelmää käyttämällä aliluokkaobjektia, kutsutaan aliluokan staattista menetelmää.

Seuraavassa esimerkissä ParentClassilla on staattinen menetelmä nimeltä display() ja myös ChildClassilla on sama menetelmän allekirjoitus. Johdetun luokan menetelmä (ChildClass) piilottaa menetelmän perusluokkaan. katsotaanpa esimerkki.

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

Lähtö:

 display() method of the parent class.