Metodöverbelastning och åsidosättande är de två sätt på vilka Java visar polymorfism. Polymorfism kommer från en kombination av två grekiska ord: "poly" som betyder många och "morph" som betyder form. Därför möjliggör polymorfism metoder att ta på sig många former.

Följ den här guiden för att lära dig hur man överbelastar eller åsidosätter metoder i Java.

Vad är metodöverbelastning?

"Metodöverbelastning" avser att definiera olika metoder i en klass med samma namn. Metoderna måste ha olika signaturer. En metodsignatur är kombinationen av metodens namn och parameterlista. Den inkluderar inte returtypen.

Kompilatorn vet vilken metod som ska användas genom att kontrollera typ, antal parametrar och ordning i vilken de placeras.

Relaterad: Utforska arv i Java-programmeringsspråket

Metodöverbelastning visar sammanställningstidspolymorfism. Kompileringstidspolymorfism betyder att Java-kompilatorn binder ett objekt till dess funktionalitet vid körning. Kompilatorn kontrollerar metodens signaturer för att uppnå detta.

instagram viewer

Denna typ av polymorfism är också känd som statisk eller tidig bindning.

Se exempel på metod för överbelastning nedan:

klass Aritmetik {
int kub (int x) {
returnera x * x * x;
}
dubbel kub (dubbel x) {
returnera x * x * x;
}
float kub (float x) {
returnera x * x * x;
}
public static void main (String [] args) {
Aritmetik myMultiplication = ny aritmetik ();
System.out.println ("Kuben av 5 är" + myMultiplication.cube (5));
System.out.println ("Kuben av 5.0 är" + myMultiplication.cube (5.0));
System.out.println ("Kuben på 0,5 är" + myMultiplication.cube (0.5));
}
}

Produktion:

Kuben på 5 är 125
Kuben på 5.0 är 125.0
Kuben på 0,5 är 0,125

Koden ovan visar hur du kan få en kub av olika typer (int, dubbel, flyta) med samma metod.

Generellt används metodöverbelastning för att definiera liknande metoder med olika parametertyper.

Vad är metodöverskridande?

Detta hänvisar till en annan implementering av en metod i en underklass. Metoden måste redan ha definierats i föräldraklassen.

Den övergripande metoden (dvs. den i underklassen) måste ha samma metodesignatur som den i superklassen. Returtypen för den överordnade metoden kan vara densamma eller en subtyp av den i superklassen.

Överstyrning används vanligtvis för att inkludera en specifik implementering av ett objekts beteende i underklassen.

klasskonto {
offentligt ogiltigt meddelande () {
System.out.println ("
Tack för att du öppnade ett konto hos oss! ");
}
public static void main (String args []) {
Konto myAccount = nytt konto ();
Besparingar mySavings = nya besparingar ();
FixedDeposit myFixedDepo = ny FixedDeposit ();
myAccount.message ();
mySavings.message ();
myFixedDepo.message ();
}
}
class Savings utökar konto {
offentligt ogiltigt meddelande () {
System.out.println ("
Tack för att du öppnade ett sparkonto hos oss! ");
}
}
klass FixedDeposit utökar konto {
offentligt ogiltigt meddelande () {
System.out.println ("
Tack för att du öppnade ett konto med fast insättning hos oss! ");
}
}

Produktion:

Tack för att du öppnade ett konto hos oss!
Tack för att du öppnade ett sparkonto hos oss!
Tack för att du öppnade ett fast insättningskonto hos oss!

Ovanstående exempel visar hur metoden meddelande() åsidosätts i underklasserna Besparingar och Fast insättning. Olika meddelanden visas för bankkontoinnehavare med ett sparkonto och de med ett fast insättningskonto.

Relaterad: Vad du behöver veta om att använda strängar i Java

Det är också värt att notera att metod som åsidosätter demonstrerar körningspolymorfism eller dynamisk metodutskick. Detta innebär att metoden som ska anropas löses vid körning snarare än vid sammanställning.

Använd nyckelordet för att undvika att en metod åsidosätts slutlig.

slutligt ogiltigt meddelande () {
System.out.println ("
Tack för att du öppnade ett konto hos oss! ");
}

När en underklass försöker åsidosätta den uppstår ett kompileringsfel.

Helst bör alla metoder som kallas inom en konstruktör vara slutlig. Detta för att undvika oavsiktliga ändringar som kan orsakas av underklasserna.

Ibland kan du behöva komma åt en åsidosatt metod inom den åsidosättande metoden. Du kan använda nyckelordet super följt av punktoperatören (.) och metodnamnet i ett sådant fall.

Tänk på superklassen Djur.

klass Djur {
offentligt ogiltigt drag () {
System.out.println ("
Jag kan flytta. ");
}
}

Nedan finns en underklass, kallad Fisk, som åsidosätter flytta():

klass Fisk utvidgar djur {
offentligt ogiltigt drag () {
System.out.println ("
Jag kan simma.");
super.move ();
}
public static void main (String args []) {
Fish Tilapia = ny fisk ();
Tilapia.move ();
}
}

Produktion:

Jag kan simma.
Jag kan röra mig.

När du åsidosätter en metod måste du också vara medveten om den åtkomstmodifierare som används. Modifieraren i underklassen ska ha samma synlighet eller högre än i basklassen. Till exempel om metoden i basklassen definieras som skyddad, då kan den övergripande metoden antingen vara skyddad eller offentlig.

Enkel kod med polymorfism

Metodöverstyrning och överbelastning är viktigt för kodförenkling, och enkel kod är god praxis.

Varför? Föreställ dig en komplex kodbas med fler insatser än än Grand Central Station. Föreställ dig nu att ett förödande fel börjar förstöra ditt hårda arbete framför dina ögon. Du måste isolera infektionskällan och du måste göra det snabbt.

Lycka till, du förenklar inte din kod... Nu håller du på att få en sann lektion i kryptografi. Att använda effektiva datastrukturer och göra vad du kan för att förkorta koden (som att hålla DRY i åtanke) är ditt bästa försvar mot en sådan situation.

Nästa upp på din Java-inlärningslista ska fungera med matriser. De är viktiga datastrukturer som används för att lagra partier av datapunkter.

E-post
Hur man skapar och utför operationer på arrays i Java

Lär dig Java? Låt matriser hantera dina data med lätthet.

Läs Nästa

Relaterade ämnen
  • Programmering
  • Java
  • Kodningshandledning
Om författaren
Jerome Davidson (15 artiklar publicerade)

Jerome är Staff Writer på MakeUseOf. Han täcker artiklar om programmering och Linux. Han är också en kryptoentusiast och håller alltid koll på kryptobranschen.

Mer från Jerome Davidson

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!

Ett steg till…!

Bekräfta din e-postadress i e-postmeddelandet som vi just skickade till dig.

.