Metodeoverbelastning og overstyring er de to måtene Java demonstrerer polymorfisme. Polymorfisme kommer fra en kombinasjon av to greske ord: "poly" som betyr mange og "morph" som betyr form. Derfor muliggjør polymorfisme metoder å ta på seg 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 metodens navn og parameterliste. Den inkluderer ikke returtypen.
Kompilatoren vet hvilken metode som skal brukes ved å sjekke typen, antall parametere og rekkefølgen de plasseres i.
I slekt: Utforske arv i Java-programmeringsspråket
Metodeoverbelastning viser kompileringstidspolymorfisme. Kompileringstidspolymorfisme betyr at Java-kompilatoren binder et objekt til funksjonaliteten ved kjøretid. Kompilatoren sjekker metodesignaturer for å oppnå dette.
Denne typen polymorfisme er også kjent som statisk eller tidlig binding.
Se metoden for overbelastning av eksemplet nedenfor:
klasse Aritmetikk {
int kube (int x) {
return x * x * x;
}
dobbel kube (dobbel x) {
return x * x * x;
}
float kube (float x) {
return x * x * x;
}
public static void main (String [] args) {
Aritmetikk myMultiplication = ny aritmetikk ();
System.out.println ("Kuben til 5 er" + myMultiplication.cube (5));
System.out.println ("Kuben på 5.0 er" + myMultiplication.cube (5.0));
System.out.println ("Kuben på 0,5 er" + myMultiplication.cube (0.5));
}
}
Produksjon:
Kuben på 5 er 125
Kuben på 5.0 er 125.0
Kuben på 0,5 er 0,125
Koden ovenfor viser hvordan du kan få en kube 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 være definert i foreldreklassen.
Den overordnede metoden (dvs. den i underklassen) må ha samme metodesignatur som i superklassen. Returtypen til den overordnede metoden kan være den samme eller en undertype som den i superklassen.
Overstyring brukes vanligvis til å inkludere en spesifikk implementering av et objekts atferd i underklassen.
klassekonto {
offentlig ugyldig melding () {
System.out.println ("
Takk for at du åpnet en konto hos oss! ");
}
public static void main (String args []) {
Konto myAccount = ny konto ();
Sparing mySavings = nye besparelser ();
FixedDeposit myFixedDepo = ny FixedDeposit ();
myAccount.message ();
mySavings.message ();
myFixedDepo.message ();
}
}
class Savings utvider kontoen {
offentlig ugyldig melding () {
System.out.println ("
Takk for at du åpnet en sparekonto hos oss! ");
}
}
klasse FixedDeposit utvider konto {
offentlig ugyldig melding () {
System.out.println ("
Takk for at du åpnet en fast innskuddskonto hos oss! ");
}
}
Produksjon:
Takk for at du åpnet en konto hos oss!
Takk for at du åpnet en sparekonto hos oss!
Takk for at du åpnet en fast innskuddskonto hos oss!
Ovenstående eksempel viser hvordan metoden beskjed() overstyres i underklassene Besparelser og Fast innskudd. Ulike meldinger 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øretidspolymorfisme eller dynamisk metodeutsendelse. 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 nøkkelordet endelig.
endelig ugyldig melding () {
System.out.println ("
Takk for at du åpnet en konto hos oss! ");
}
Når en underklasse prøver å overstyre den, vil det oppstå en kompileringsfeil.
Ideelt sett bør alle metoder som kalles i en konstruktør være endelig. Dette for å unngå utilsiktede endringer som kan være forårsaket av underklassene.
Noen ganger må du kanskje få tilgang til en overstyrt metode innenfor den overstyrende metoden. Du kan bruke nøkkelordet super etterfulgt av prikkoperatøren (.) og metodenavnet i et slikt tilfelle.
Tenk på superklassen Dyr.
klasse Dyr {
offentlig ugyldig flytting () {
System.out.println ("
Jeg kan bevege meg. ");
}
}
Nedenfor er en underklasse, kalt Fisk, som overstyrer bevege seg():
klasse Fisk utvider dyr {
offentlig ugyldig flytting () {
System.out.println ("
Jeg kan svømme.");
super.move ();
}
public static void main (String args []) {
Fish Tilapia = ny fisk ();
Tilapia.move ();
}
}
Produksjon:
Jeg kan svømme.
Jeg kan bevege meg.
Når du overstyrer en metode, må du også være oppmerksom på tilgangsmodifikatoren som brukes. Modifikatoren i underklassen skal ha samme synlighetsnivå eller høyere enn i basisklassen. For eksempel hvis metoden i baseklassen er definert som beskyttet, så 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 innsatser enn enn Grand Central Station. Tenk deg at en ødeleggende bug begynner å ødelegge ditt harde arbeid foran øynene dine. Du må isolere infeksjonskilden, og du må gjøre det raskt.
Lykke til, du forenklet ikke koden din... Nå er du i ferd med å få en sann leksjon i kryptografi. Å bruke effektive datastrukturer og gjøre det du kan for å forkorte koden (for eksempel å ha TØRKE i tankene) er ditt beste forsvar mot en situasjon som denne.
Neste opp på Java-læringslisten din skal jobbe med matriser. De er viktige datastrukturer som brukes til å lagre grupper med datapunkter.
Lærer du Java? La matriser enkelt håndtere dataene dine.
Les Neste
- Programmering
- Java
- Koding opplæringsprogrammer
Jerome er Staff Writer på MakeUseOf. Han dekker artikler om programmering og Linux. Han er også en kryptoentusiast og holder alltid øye med kryptoindustrien.
Abonner på vårt nyhetsbrev
Bli med på nyhetsbrevet vårt for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!
Ett steg til…!
Bekreft e-postadressen din i e-posten vi nettopp sendte deg.