Java-metode tilsidesat

I denne vejledning lærer vi om metodeoverstyring i Java ved hjælp af eksempler.

I den sidste tutorial lærte vi om arv. Arv er en OOP-egenskab, der giver os mulighed for at udlede en ny klasse (underklasse) fra en eksisterende klasse (superklasse). Underklassen arver superklassens attributter og metoder.

Hvis den samme metode nu er defineret i både superklassen og underklassen, tilsidesætter metoden i underklasseklassen metoden til superklassen. Dette er kendt som metode tilsidesat.

Eksempel 1: Overstyring af metode

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( @Override public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Output :

 Jeg er en hund. 

I ovenstående program er displayInfo()metoden til stede i både Animal superklassen og Dog underklassen.

Når vi ringer displayInfo()ved hjælp af d1-objektet (objekt i underklassen) kaldes metoden inde i underklassen Dog. Den displayInfo()fremgangsmåde til underklassen tilsidesætter den samme fremgangsmåde superklassen.

Bemærk brugen af @Overridekommentaren i vores eksempel. I Java er annoteringer de metadata, som vi brugte til at give information til compileren. Her angiver @Overridekommentaren kompilatoren, at metoden efter denne kommentar tilsidesætter superklassens metode.

Det er ikke obligatorisk at bruge @Override. Men når vi bruger dette, skal metoden følge alle reglerne for tilsidesættelse. Ellers genererer compileren en fejl.

Java-tilsidesættende regler

  • Både superklassen og underklassen skal have samme metodenavn, samme returtype og samme parameterliste.
  • Vi kan ikke tilsidesætte den metode, der er erklæret som finalog static.
  • Vi bør altid tilsidesætte superklassens abstrakte metoder (vil blive diskuteret i senere tutorials).

super Keyword i Java Overriding

Et almindeligt spørgsmål, der opstår, når du udfører tilsidesættelse i Java, er:

Kan vi få adgang til superklassens metode efter tilsidesættelse?

Svaret er ja . For at få adgang til superklassens metode fra underklassen bruger vi supernøgleordet.

Eksempel 2: Brug af super Keyword

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( super.displayInfo(); System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Output :

Jeg er et dyr. Jeg er en hund.

I ovenstående eksempel tilsidesætter underklassen Dog metoden displayInfo()til superklassen Animal.

Når vi kalder metoden displayInfo()ved hjælp af d1-objektet i Dog-underklassen, kaldes metoden inde i Dog-underklassen; metoden inde i superklassen kaldes ikke.

Inde displayInfo()i Dog-underklassen har vi brugt super.displayInfo()til at kalde displayInfo()på superklassen.

Det er vigtigt at bemærke, at konstruktører i Java ikke arves. Derfor er der ikke sådan noget, som konstruktør tilsidesætter i Java.

Vi kan dog kalde superklassens konstruktør fra dens underklasser. Til det bruger vi super(). For at lære mere, besøg Java super nøgleord.

Adgangsspecifikatorer i metodeoverstyring

Den samme metode, der er angivet i superklassen og dens underklasser, kan have forskellige adgangsspecifikationer. Der er dog en begrænsning.

Vi kan kun bruge disse adgangsspecifikatorer i underklasser, der giver større adgang end superklassens adgangsspecifikator. For eksempel,

Antag, myClass()at der erklæres en metode i superklassen protected. Derefter kan den samme metode myClass()i underklassen være enten publiceller protected, men ikke private.

Eksempel 3: Adgangsspecifikator i tilsidesættelse

 class Animal ( protected void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Output :

 Jeg er en hund. 

I ovenstående eksempel tilsidesætter underklassen Dog metoden displayInfo()til superklassen Animal.

Når vi ringer displayInfo()ved hjælp af d1 (objekt i underklassen), kaldes metoden inde i underklassen.

Bemærk, at det displayInfo()er erklæret protectedi Animal superklassen. Den samme metode har publicadgangsspecifikatoren i Dog-underklassen. Dette er muligt, fordi det publicgiver større adgang end protected.

Tilsidesættelse af abstrakte metoder

I Java oprettes abstrakte klasser for at være superklassen for andre klasser. Og hvis en klasse indeholder en abstrakt metode, er det obligatorisk at tilsidesætte den.

Vi lærer mere om abstrakte klasser og tilsidesættelse af abstrakte metoder i senere tutorials.

Interessante artikler...