Polimorfizam u Javi: Kako preopteretiti ili nadjačati metode

Polimorfizam u Javi: Kako preopteretiti ili nadjačati metode

Preopterećenje i nadjačavanje metoda dva su načina na koja Java pokazuje polimorfizam. Polimorfizam dolazi od kombinacije dvije grčke riječi: 'poly' što znači mnogo i 'morph' što znači oblik. Stoga polimorfizam omogućuje metodama da poprime mnoge oblike.





Slijedite ovaj vodič da biste saznali kako preopteretiti ili nadjačati metode u Javi.





Što je preopterećenje metode?

'Preopterećenje metoda' odnosi se na definiranje različitih metoda u klasi s istim imenom. Metode moraju imati različite potpise. Potpis metode je kombinacija naziva metode i popisa parametara. Ne uključuje vrstu povrata.





Prevoditelj zna koju metodu koristiti provjeravajući vrstu, broj parametara i redoslijed njihovog postavljanja.

Povezano: Istraživanje nasljeđivanja u programskom jeziku Java



Preopterećenje metoda pokazuje polimorfizam vremena kompiliranja. Polimorfizam vremena kompajliranja znači da Java prevoditelj veže objekt za njegovu funkcionalnost tijekom izvođenja. Prevodilac provjerava potpise metoda kako bi to postigao.

Ova vrsta polimorfizma poznata je i kao statičko ili rano vezivanje.





Primjer preopterećenja metode pogledajte u nastavku:

class Arithmetic{
int cube(int x){
return x*x*x;
}
double cube(double x){
return x*x*x;
}
float cube(float x){
return x*x*x;
}
public static void main(String[] args){
Arithmetic myMultiplication = new Arithmetic();
System.out.println('The cube of 5 is ' + myMultiplication.cube(5));
System.out.println('The cube of 5.0 is ' + myMultiplication.cube(5.0));
System.out.println('The cube of 0.5 is ' + myMultiplication.cube(0.5));
}
}

Izlaz:





The cube of 5 is 125
The cube of 5.0 is 125.0
The cube of 0.5 is 0.125

Gornji kôd pokazuje kako možete dobiti kocku različitih vrsta ( int , dvostruko , plutati ) koristeći istu metodu.

Općenito se preopterećenje metoda koristi za definiranje sličnih metoda s različitim vrstama parametara.

Što je nadjačavanje metode?

To se odnosi na drugačiju implementaciju metode u podrazredu. Metoda mora biti već definirana u roditeljskoj klasi.

Metoda nadjačavanja (tj. Ona u podklasi) mora imati isti potpis metode kao ona u nadklasi. Vrsta povratne metode nadjačavajuće metode može biti ista ili podvrsta one u nadklasi.

Nadjačavanje se općenito koristi za uključivanje specifične implementacije ponašanja objekta u podklasu.

class Account{
public void message() {
System.out.println('
Thank you for opening an account with us!');
}
public static void main(String args[]) {
Account myAccount = new Account();
Savings mySavings = new Savings();
FixedDeposit myFixedDepo = new FixedDeposit();
myAccount.message();
mySavings.message();
myFixedDepo.message();
}
}
class Savings extends Account {
public void message() {
System.out.println('
Thank you for opening a Savings account with us!');
}
}
class FixedDeposit extends Account {
public void message() {
System.out.println('
Thank you for opening a Fixed Deposit account with us!');
}
}

Izlaz:

Thank you for opening an account with us!
Thank you for opening a Savings account with us!
Thank you for opening a Fixed Deposit account with us!

Gornji primjer pokazuje kako se metoda poruka() je nadjačano u potklasama Štednja i Fiksni depozit . Različite poruke bit će prikazane za vlasnike bankovnih računa sa štednim računom i one sa računom sa fiksnim depozitom.

Povezano: Što trebate znati o korištenju nizova u Javi

Također je vrijedno napomenuti da nadjačavanje metode pokazuje polimorfizam vremena izvođenja ili slanje dinamičke metode. To znači da se metoda koju treba pozvati rješava u vrijeme izvođenja, a ne pri kompilaciji.

Da biste izbjegli nadjačavanje metode, upotrijebite ključnu riječ konačan .

final void message (){
System.out.println('
Thank you for opening an account with us!');
}

Kad ga potklasa pokuša nadjačati, doći će do pogreške pri sastavljanju.

U idealnom slučaju, sve metode pozvane unutar konstruktora trebaju biti konačan . Time se izbjegavaju nenamjerne promjene do kojih može doći zbog potklasa.

Ponekad ćete možda morati pristupiti nadjačanoj metodi unutar metode nadjačavanja. Možete koristiti ključnu riječ super slijedi dot operator ( . ) i naziv metode u takvom slučaju.

Razmotrimo superklasu Životinja .

class Animal{
public void move() {
System.out.println('
I can move.');
}
}

Ispod je podrazred, tzv Riba , to poništava potez() :

class Fish extends Animal {
public void move() {
System.out.println('
I can swim.');
super.move();
}
public static void main(String args[]){
Fish Tilapia = new Fish();
Tilapia.move();
}
}

Izlaz:

najbolji besplatni upravitelj datoteka za Windows 2018
I can swim.
I can move.

Prilikom nadjačavanja metode također morate imati na umu korišteni modifikator pristupa. Modifikator u potklasi trebao bi imati istu razinu vidljivosti ili višu nego u osnovnoj klasi. Na primjer, ako je metoda u osnovnoj klasi definirana kao zaštićen , tada metoda nadjačavanja može biti ili zaštićen ili javnost .

Jednostavan kod s polimorfizmom

Nadjačavanje metoda i preopterećenje važni su za pojednostavljenje koda, a jednostavan je kod dobra praksa.

Zašto? Zamislite složenu bazu kodova s ​​više ulaza i izlaza nego u Grand Central Stationu. Zamislite sada kako razorna buba počinje uništavati vaš naporan rad pred vašim očima. Morate izolirati izvor infekcije i to morate učiniti brzo.

Sretno, niste pojednostavili svoj kôd ... Sada ćete dobiti pravu lekciju iz kriptografije. Upotreba učinkovitih struktura podataka i učiniti sve što možete da skratite kôd (kao što je DRY na umu) vaša je najbolja obrana od ovakve situacije.

Sljedeći na vašem popisu učenja za Java trebao bi raditi s nizovima. To su važne strukture podataka koje se koriste za spremanje serija podatkovnih točaka.

Udio Udio Cvrkut E -pošta Kako stvoriti i izvesti operacije nad nizovima u Javi

Učenje Jave? Dopustite nizovima da s lakoćom obrađuju vaše podatke.

Pročitajte Dalje
Povezane teme
  • Programiranje
  • Java
  • Vodiči za kodiranje
O autoru Jerome Davidson(22 objavljena članka)

Jerome je osobni pisac na MakeUseOfu. On pokriva članke o programiranju i Linuxu. On je također entuzijast za kripto i uvijek prati kripto industriju.

Više od Jeromea Davidsona

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu