Polymorfisme i Java: Hvordan overbelaste eller overstyre metoder

Polymorfisme i Java: Hvordan overbelaste eller overstyre metoder

Metodeoverbelastning og overstyring er de to måtene Java demonstrerer polymorfisme på. Polymorfisme kommer fra en kombinasjon av to greske ord: 'poly' som betyr mange og 'morph' som betyr form. Derfor gjør polymorfisme det mulig for metoder å anta mange former.





Følg denne veiledningen for å lære hvordan du overbelaster eller overstyrer metoder i Java.





Hva er metodeoverbelastning?

'Metodeoverbelastning' refererer til å definere forskjellige metoder i en klasse med samme navn. Metodene må ha forskjellige signaturer. En metodesignatur er kombinasjonen av en metodes navn og parameterliste. Den inkluderer ikke returtypen.





Kompilatoren vet hvilken metode som skal brukes ved å kontrollere typen, antallet parametere og rekkefølgen de er plassert i.

I slekt: Utforske arv på Java -programmeringsspråket



Metodeoverbelastning demonstrerer kompileringstidspolymorfisme. Kompileringstidspolymorfisme betyr at Java-kompilatoren binder et objekt til funksjonaliteten under kjøretid. Kompilatoren sjekker metodesignaturer for å oppnå dette.

Denne typen polymorfisme er også kjent som statisk eller tidlig binding.





Se eksempelet på overbelastning av metoden nedenfor:

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

Produksjon:





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

Koden ovenfor viser hvordan du kan få en terning av forskjellige typer ( int , dobbelt , flyte ) ved hjelp av samme metode.

Vanligvis brukes metodeoverbelastning for å definere lignende metoder med forskjellige parametertyper.

Hva er metodeoverstyring?

Dette refererer til en annen implementering av en metode i en underklasse. Metoden må allerede ha blitt definert i foreldreklassen.

Den overordnede metoden (dvs. den i underklassen) må ha samme metodesignatur som i superklassen. Returtypen for den overordnede metoden kan være den samme eller en undertype av den i superklassen.

Overstyring brukes vanligvis til å inkludere en spesifikk implementering av et objekts oppførsel i underklassen.

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

Produksjon:

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!

Eksemplet ovenfor viser hvordan metoden beskjed() er overstyrt i underklassene Besparelser og Fast innskudd . Ulike meldinger vil vises for bankkontoinnehavere med en sparekonto og de med en fast innskuddskonto.

I slekt: Hva du trenger å vite om bruk av strenger i Java

Det er også verdt å merke seg at metodeoverstyring demonstrerer kjøretids polymorfisme eller dynamisk metodeforsendelse. Dette betyr at metoden som skal kalles løses ved kjøretid i stedet for ved kompilering.

For å unngå at en metode blir overstyrt, bruk søkeordet endelig .

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

Når en underklasse prøver å overstyre den, vil det oppstå en kompilasjonsfeil.

Ideelt sett bør alle metoder som kalles i en konstruktør være endelig . Dette er for å unngå utilsiktede endringer som kan skyldes underklassene.

Noen ganger må du kanskje få tilgang til en overstyrt metode innenfor overstyringsmetoden. Du kan bruke søkeordet super etterfulgt av prikkoperatoren ( . ) og metodenavnet i et slikt tilfelle.

Tenk på superklassen Dyr .

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

Nedenfor er en underklasse, kalt Fisk , som overstyrer bevege seg() :

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

Produksjon:

Jeg mottok ikke min Amazon -bestilling
I can swim.
I can move.

Når du overstyrer en metode, må du også være oppmerksom på tilgangsmodifikatoren som brukes. Modifikatoren i underklassen skal ha samme synlighet eller høyere enn i baseklassen. For eksempel hvis metoden i baseklassen er definert som beskyttet , da kan den overordnede metoden enten være beskyttet eller offentlig .

Enkel kode med polymorfisme

Metodeoverstyring og overbelastning er viktig for kodeforenkling, og enkel kode er god praksis.

Hvorfor? Tenk deg en kompleks kodebase med flere inn- og utslag enn Grand Central Station. Tenk deg nå at en ødeleggende feil begynner å ødelegge hardt arbeid foran øynene dine. Du må isolere kilden til infeksjonen, og du må gjøre det raskt.

Lykke til, du forenklet ikke koden din ... Nå skal du få en sann leksjon i kryptografi. Å bruke effektive datastrukturer og gjøre det du kan for å forkorte koden (for eksempel å holde TØR i tankene) er ditt beste forsvar mot en situasjon som denne.

Neste opp på Java -læringslisten din bør jobbe med matriser. De er viktige datastrukturer som brukes til å lagre batcher med datapunkter.

Dele Dele kvitring E -post Hvordan lage og utføre operasjoner på matriser i Java

Lærer du Java? La matriser håndtere dataene dine enkelt.

Les neste
Relaterte temaer
  • Programmering
  • Java
  • Opplæringsprogrammer for koding
Om forfatteren Jerome Davidson(22 artikler publisert)

Jerome er personalforfatter på MakeUseOf. Han dekker artikler om programmering og Linux. Han er også en kryptoentusiast og holder alltid oversikt over kryptoindustrien.

Mer fra Jerome Davidson

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!

Klikk her for å abonnere