java override method overriding
Ovaj tutorial objašnjava kako postići runtime polimorfizam u Javi pomoću metoda Overriding Method i bilješke @override s jednostavnim primjerima:
Već smo detaljno raspravljali o konceptu polimorfizma i polimorfizmu kompilacije. U ovom uputstvu nastavit ćemo s runtime polimorfizmom u Javi.
Za razliku od polimorfizma vremena kompajliranja u kojem se poziv metode rješava u vrijeme kompajliranja, u polimorfizmu izvođenja, poziv metode rješava se u vrijeme izvođenja.
=> Ovdje provjerite SVE Java tutorijale.
Što ćete naučiti:
- Runtime polimorfizam u Javi
- Bilješka @override u Javi
- Preopterećenje i poništavanje u Javi
- Zaključak
Runtime polimorfizam u Javi
Izvršni polimorfizam koji je također poznat kao dinamički polimorfizam ili Otprema dinamičke metode je tehnika u kojoj se nadjačani poziv metode dinamički rješava za vrijeme izvođenja.
Runtime polimorfizam u Javi postiže se korištenjem “ nadjačavanje metode '. Nadjačavanje metode je tehnika kojom se metoda u roditeljskoj klasi redefinira ili poništava u podređenoj klasi.
Kada je metoda nadjačana u klasi, tehnika slanja dinamičke metode rješava nadjačani poziv metode u vrijeme izvođenja, a ne u vrijeme kompajliranja.
Postići runtime polimorfizam u Javi - nadjačavanje metode
Nadjačavanje metode pristup je koji koristimo za postizanje runtime polimorfizma u Javi. Kao što je već spomenuto, nadjačavanje metode je tehnika u kojoj podrazred dodaje metodu koja je već prisutna u roditeljskoj klasi i dodaje novu funkcionalnost ovoj metodi. Tada kažemo da je metoda osnovne klase poništena.
Nova metoda koju smo definirali u podrazredu s istim prototipom kao i metoda roditeljske klase, ali različita implementacija naziva se „ nadjačavanje metode ' . Metoda u roditeljskoj klasi poznata je kao „ Nadjačana metoda '.
koje vrste e-adresa postoje
Jednom kada je metoda nadjačana, ostaje pitanje kako je riješen poziv ovoj nadjačanoj metodi?
Nadređenu metodu obično nazivamo referencom osnovne klase. Stvorit ćemo referencu tipa base, a zatim dodijeliti objekt podređene klase pomoću nove ključne riječi.
Stoga ovisi o sadržaju referentne varijable ili o tome na koji se objekt referencira osnovna klasa, a to određuje koja će metoda biti pozvana. Dakle, ako referentni objekti upućuju na objekt podređene klase, tada se poziva metoda nadjačavanja.
Inače, ako referentni objekt sadrži objekt osnovne klase, tada se poziva nadjačana metoda. Jedna od tema koja nam mora biti jasna u runtime polimorfizmu, posebno za dinamičko slanje metoda, je 'Upcasting', što je objašnjeno u nastavku.
Upcasting
Kada referentni objekt nadređene klase o kojem smo gore raspravljali upućuje na objekt podklase ili se odnosi na njega, tada ga nazivamo Upcasting.

Razumijemo ažuriranje na jednostavnom primjeru.
Uzmimo u obzir da imamo klasu 'BaseClass' i proširujemo ovaj BaseClass kako bismo stvorili novu klasu DerivedClass. Ova struktura izgleda kao što je prikazano u nastavku.
class BaseClass { ….//BaseClass code here } class DerivedClass extends BaseClass{ ….//DerivedClass code here }Sada ćemo za provedbu nadogradnje proglasiti referentnu varijablu tipa BaseClass. Dalje, dodijeljujemo objekt DerivedClass referenci klase BaseClass kao što je učinjeno u donjem naredbenom kodu.
BaseClass base = new DerivedClass (); //UpcastingDakle, ovdje možemo reći da smo nadogradili objekt DerivedClass na BaseClass. Što se tiče polimorfizma vremena izvođenja, koncept nadogradnje je vrlo važan.
Stoga je općenito ažuriranje postupak dodjeljivanja podređenih ili podrazreda objektima referenci roditelja ili superrazreda.
SuperClass reference = new Subclass Object;Java program u nastavku prikazuje nadjačavanje metode i također pokazuje kako se izvođenje nadogradnje rješava nadjačanim pozivima metode u vrijeme izvođenja.
//base/parent class class Parent { void Print() //print method { System.out.println('Parent::Print() method'); } } //child class 1 inheriting from Parent class child1 extends Parent { void Print() //overridden print method { System.out.println('child1::Print() method'); } } //child class 2 inheriting from Parent class child2 extends Parent { void Print() //overridden print method { System.out.println('child2::Print() method'); } } class Main { public static void main(String() args) { Parent parent = new Parent(); parent.Print(); //executes parent Print () method parent = new child1(); //upcasting parent.Print(); //executes child1 Print () method parent = new child2(); //upcasting parent.Print(); //executes child2 Print () method Izlaz:

U gornjem programu imamo dva razreda, tj. Dijete1 i dijete2, koji su izvedeni iz razreda 'Roditelj'. Roditeljski razred ima metodu 'Ispis' koja je poništena i u klasama child1 i child2. Zatim u glavnoj metodi izrađujemo referentni objekt roditeljske klase pod nazivom ‘roditelj’.
Prvo mu dodijelimo objekt klase Roditelj, a zatim pozivamo metodu „Print ()“. Zatim to ponavljamo tako da prvo dodijelimo objekt child1, a zatim objekt child2 roditeljskoj referenci.
kako gledati .mkv datoteke
Izlaz prikazuje, ovisno o sadržaju nadređene reference, i poziva se odgovarajuća metoda ispisa.
Prednosti dinamičkog / runtim polimorfizma
- Uz dinamički polimorfizam, programeru je dopušteno da nadjača metode.
- Omogućuje klasama da definiraju metodu s općenitom implementacijom koju njezini derivati zatim mogu nadjačati i pružaju specifičnu implementaciju.
- S dinamičkim slanjem metode, poziv metode se rješava za vrijeme izvođenja, za razliku od preopterećenja koje se odlučuje u vrijeme kompajliranja. To omogućuje veću fleksibilnost programerima.
Kako polimorfizam izvođenja veže odgovarajuću metodu za poziv u vrijeme izvođenja, a mi je također nazivamo dinamičko vezivanje ili kasno vezivanje . S druge strane, potporan je kompilacijski polimorfizam statičko vezivanje ili rano vezivanje .
Statičko vs dinamičko povezivanje
| Statično vezivanje | Dinamičko vezanje |
|---|---|
| Poziv metode razriješen u vrijeme kompajliranja statično je vezanje. | Poziv metode razriješen u vrijeme izvođenja je dinamičko vezanje. |
| Preopterećenje metode je primjer statičkog vezanja. | Nadjačavanje metode je primjer dinamičkog vezanja. |
| Vrste klasa i polja koriste se za statičko vezivanje. | Objekti se koriste za dinamičko povezivanje. |
| Privatni, konačni i statički entiteti koriste statičko vezanje. | Virtualne metode koriste dinamičko vezanje. |
Virtualna funkcija / metoda u Javi
Virtualna funkcija ili metoda u Javi značajka je koja se koristi s runtime polimorfizmom. Za razliku od C ++, Java nema posebnu ‘virtualnu’ ključnu riječ da označi da je metoda virtualna. Metoda koja je definirana u osnovnoj klasi i poništena u izvedenoj klasi je virtualna.
U Javi je prema zadanim postavkama svaka nestatična metoda, osim privatne i finalne, virtualna funkcija. Dakle, imajte na umu da su metode o kojima smo gore raspravljali nadjačavajuće za provođenje runtime polimorfizma također virtualne metode.
Kako je statička metoda vezana za klasu i ne može se pozvati pomoću objekta, ne može se koristiti s runtime polimorfizmom i također nije virtualna funkcija.
Sučelja u Javi su prema zadanim postavkama virtualna. Klase koje implementiraju sučelja pružaju implementacije metoda sučelja. Kao iu runtime polimorfizmu, pozivi na metode sučelja također se rješavaju tijekom izvođenja.
Imajte na umu da su metode u sučelju dizajnirane za nadjačavanje, sve metode sučelja su virtualne funkcije.
Na primjer, uzmite u obzir sljedeći kod:
interface car{ void accelerate(); } class Maruti implements car{ void accelerate () { System.out.println(“Maruti car accelerated!!”); } }U gornjem kodu metoda accelerate () je virtualna funkcija jer je dio sučelja i dizajnirana je za poništavanje.
Bilješka @override u Javi
Bilješka @override zadana je napomena u Javi. Ova je napomena uvedena u Javi 1.5. Bilješka @override koristi se kada metoda podrazreda nadjača svoju metodu superklase.
Korištenjem anotacije Java @override da naznači da metoda prevladava nadređenu metodu klase, kompajler izdaje upozorenje ako anotirana metoda nije nadjačana. Stoga je obavezno da se metoda poništi kada se koristi bilješka @override.
Drugo, pomoću bilješke @override kôd činimo čitljivijim. Odjednom možemo shvatiti da se metoda koja se deklarira mora nadjačati.
Općenita sintaksa Java @override bilješke je
public @interface override Sljedeći Java program prikazuje upotrebu bilješke @override.
//base class definition class BaseClass { public void display() { System.out.println('BaseClass::display () method'); } } //derived class inheriting base class class DerivedClass extends BaseClass { @Override //indicates the display method being overridden public void display() { System.out.println('DerivedClass::display () method'); } } // main class public class Main { public static void main(String args()) { System.out.println('@Override Example'); //BaseClass type object;contain child object BaseClass testObj = new DerivedClass(); //call display method based on contents of object i.e. derived class display () testObj.display(); } } Izlaz:

U gornjem programu imamo BaseClass koji definira način prikaza. Zatim iz ove klase izvodimo klasu DerivedClass i označavamo metodu prikaza oznakom @override. Ova metoda je nadjačana u izvedenom razredu.
U glavnoj metodi izrađujemo referencu objekta BaseClass i usmjeravamo je na objekt DerivedClass zbog čega referenca poziva metodu prikaza DerivedClass.
Da nismo implementirali metodu display () u izvedenoj klasi, tada bi prevodilac dao upozorenje kompajleru jer je označena oznakom @override.
Preopterećenje i poništavanje u Javi
Sad kad smo razgovarali i o preopterećenju i nadjačavanju Java, sažeto ćemo ta dva pojma.
Preopterećenje je povezano s polimorfizmom vremena kompajliranja, tj. Mi implementiramo polimorfizam vremena kompajliranja koristeći preopterećenje. Preopterećenje se vrši na dva načina, tj. Preopterećenje metode i preopterećenje operatora.
Preopterećenje metode je tehnika u kojoj imamo više metoda s istim nazivom, ali različitim popisima parametara. Popis parametara razlikuje se na temelju broja parametara, vrsta parametara ili niza parametara.
Preopterećenje operatora u Javi je ograničeno i omogućuje nam da preopteretimo samo operator ‘+’ koji se koristi za zbrajanje dva broja i spajanje dva String objekta.
Preopterećenje se rješava u vrijeme kompajliranja i statično je. Također se naziva ‘Rano povezivanje’ .
Nadjačavanje metode je značajka pomoću koje provodimo polimorfizam vremena izvođenja. U nadjačavanju metode, metoda roditeljske klase poništava se u podređenoj klasi. To znači da prototip metode i u super i u podrazredu ostaje isti, ali su implementacije različite.
Nadjačavanje metode koristi tehniku slanja dinamičke metode kako bi razriješilo poziv metode i odlučilo hoće li se pozvati metoda superrazreda ili podrazreda, a to se radi u vrijeme izvođenja.
Stoga se polimorfizam vremena izvođenja naziva i dinamičkim polimorfizmom ili kasnim vezanjem.
Dalje, tabularizirajmo razlike između preopterećenja i poništavanja u Javi.
Preopterećenje vs nadjačavanje u Javi
| Preopterećenje | Nadjačavanje |
|---|---|
| Preopterećenje se koristi u polimorfizmu vremena kompajliranja. | Nadjačavanje se provodi u polimorfizmu izvođenja. |
| Može se raditi u istom razredu. Može ili ne mora zahtijevati nasljeđivanje. | Prevazilaženje uvijek zahtijeva nasljeđivanje. |
| Metode su preopterećene istim nazivom metode i različitim popisom parametara. | Nadjačane metode imaju iste prototipove. |
| Tip povrata ne uzima se u obzir pri preopterećenju metode. | Tip povrata trebao bi biti isti u nadjačanim i nadjačavajućim metodama. |
| Poboljšava čitljivost programa. | Nadjačavanje omogućuje mudro određenu klasu implementacije. |
Često postavljana pitanja
P # 1) Možemo li poništiti statičku metodu?
Odgovor: Ne. Statičke metode ne mogu se nadjačati u Javi. To je zato što se statičke metode temelje na klasi i izravno ih pozivaju klase. Ne trebaju im predmeti za pozivanje tijekom izvođenja. Stoga slanje statičke metode određuje sastavljač.
P # 2) Možemo li nadjačati konstruktor?
Odgovor: Ne, ne možemo nadjačati konstruktor. Konstruktor se poziva kada se objekt kreira. Ne naziva se objektom. Također, jedan od zahtjeva nadjačavanja je nadjačana metoda, a metoda nadjačavanja treba imati isti potpis metode što nije moguće u slučaju konstruktora.
P # 3) Zašto se nadjačavanje metode naziva dinamičkim polimorfizmom?
Odgovor: U slučaju nadjačavanja metode, poziv metode se dinamički rješava za vrijeme izvođenja. Stoga se naziva dinamičkim polimorfizmom.
P # 4) Kakva je korist od dinamičkog polimorfizma u Javi?
Odgovor: Dinamički polimorfizam koristi tehniku slanja dinamičke metode koja podržava nadjačavanje metode tako da podrazred može pružiti specifičnu implementaciju nadjačanoj metodi. Na taj način možemo implementirati specifične značajke koje nam omogućuju pisanje učinkovitih programa.
besplatni softver za kopiranje DVD-a za Windows
Drugo, također ne trebamo brinuti o rješavanju poziva metode jer dinamičko slanje metode odlučuje koju metodu pozvati.
P # 5) Koja je razlika između statičkog i dinamičkog povezivanja?
Odgovor: Veza između poziva metode i njezine provedbe naziva se vezivanjem. Kada se ovo povezivanje riješi u vrijeme prevođenja, nazivamo ga statičkim vezanjem. Kada se vezanje vrši dinamički u vrijeme izvođenja, tada to nazivamo dinamičkim vezivanjem.
Statičko vezivanje koristi tip podataka klase i polja za rješavanje poziva metode. Dinamičko vezanje koristi objekte za rješavanje poziva metode. Statičko vezanje naziva se i polimorfizam vremena kompajliranja, a dinamičko vezanje također se naziva polimorfizam vremena izvođenja.
Zaključak
U ovom uputstvu detaljno smo razgovarali o polimorfizmu izvođenja u Javi.
Izvršni polimorfizam provodi se korištenjem nadjačavanja metode. Nadjačavanje metode vrši se u podrazredu, pri čemu se metoda definirana u nadrazredu redefinira ili poništava u svom podrazredu. Potpis metode ostaje isti u super i podrazredu.
Korištenjem nadjačavanja metode možemo pružiti specifičnu implementaciju iste metode u podrazredu. Na taj način možemo pisati učinkovitije programe koji uključuju nasljeđivanje. Java pruža bilješku @override koja ukazuje na to da se metoda mora nadjačati.
Prema zadanim postavkama, sve nestetičke metode koje nisu konačne virtualne su u Javi. Sve virtualne metode mogu se nadjačati.
=> Ovdje pripazite na jednostavnu seriju Java treninga.
Preporučena literatura
- Nadjačavanje unaprijed definiranih metoda u Javi
- Duljina Java niza () Metoda s primjerima
- Što je polimorfizam u Javi - Vodič sa primjerima
- Kako koristiti Java toString metodu?
- Java String indexOf metoda s primjerima koda
- Java String sadrži () Vodič za metode s primjerima
- Metoda razdvajanja Java niza () - Kako podijeliti niz u Javi
- Java String compareTo metoda s primjerima programiranja