Polymorfism i Java: Hur man överbelastar eller åsidosätter metoder

Polymorfism i Java: Hur man överbelastar eller åsidosätter metoder

Metodöverbelastning och överstyrning är de två sätten på vilka Java demonstrerar 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 anta många former.





Följ den här guiden för att lära dig hur du ö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 metodesignatur är en kombination av metodens namn och parameterlista. Det 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 på Java -programmeringsspråket



Metodöverbelastning visar kompileringstidspolymorfism. Kompileringstidspolymorfism innebär att Java-kompilatorn binder ett objekt till dess funktionalitet vid körning. Kompilatorn kontrollerar metodunderskrifter för att uppnå detta.

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





Se exempel på metodöverbelastning nedan:

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

Produktion:





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

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

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

Vad är metodövervägande?

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

Den överordnade 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 undertyp av den i superklassen.

Åsidosättande används vanligtvis för att inkludera en specifik implementering av ett objekts beteende 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!');
}
}

Produktion:

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!

Ovanstående exempel visar hur metoden meddelande() är åsidosatt i underklasserna Besparingar och Fast insättning . Olika meddelanden kommer att visas för bankkontoinnehavare med ett sparkonto och dem med ett konto med fast insättning.

Relaterad: Vad du behöver veta om hur du använder strängar i Java

Det är också värt att notera att metodöverskridande visar körningspolymorfism eller dynamisk metodöverföring. Detta innebär att metoden som ska kallas löses vid körning snarare än vid kompilering.

För att undvika att en metod åsidosätts, använd sökordet slutlig .

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

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 sökordet super följt av punktoperatören ( . ) och metodnamnet i ett sådant fall.

Tänk på superklassen Djur .

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

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

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

Produktion:

hur man fixar skadade videofiler
I can swim.
I can move.

När du åsidosätter en metod måste du också vara uppmärksam på 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 skyddade , då kan den överordnade metoden vara antingen skyddade eller offentlig .

Enkel kod med polymorfism

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

Varför? Tänk dig en komplex kodbas med fler ins och outs än Grand Central Station. Tänk dig nu att en förödande bugg börjar förstöra ditt hårda arbete framför dina ögon. Du måste isolera källan till infektionen, och du måste göra det snabbt.

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

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

Dela med sig Dela med sig Tweet E-post Hur man skapar och utför operationer på matriser i Java

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

Läs Nästa
Relaterade ämnen
  • Programmering
  • Java
  • Handledning för kodning
Om författaren Jerome Davidson(22 artiklar publicerade)

Jerome är personalförfattare på MakeUseOf. Han täcker artiklar om programmering och Linux. Han är också en kryptoentusiast och håller alltid koll på kryptoindustrin.

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!

Klicka här för att prenumerera