I denne opplæringen vil vi lære om metodeoverstyring i Java ved hjelp av eksempler.
I den siste opplæringen lærte vi om arv. Arv er en OOP-egenskap som lar oss utlede en ny klasse (underklasse) fra en eksisterende klasse (superklasse). Underklassen arver superklassens attributter og metoder.
Nå, hvis den samme metoden er definert i både superklassen og underklassen, overstyrer metoden til underklasseklassen metoden til superklassen. Dette er kjent som metodeoverstyring.
Eksempel 1: Metodeoverstyring
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(); ) )
Utgang :
Jeg er en hund.
I det ovennevnte programmet er displayInfo()
metoden til stede i både Animal superklassen og Dog subklassen.
Når vi ringer displayInfo()
ved hjelp av d1-objektet (objekt av underklassen), kalles metoden i underklassen Dog. Den displayInfo()
metode for underklassen styrer den samme metode for super.
Legg merke til bruken av @Override
merknaden i vårt eksempel. I Java er merknader metadataene vi brukte for å gi informasjon til kompilatoren. Her @Override
spesifiserer merknaden kompilatoren at metoden etter denne merknaden overstyrer superklassens metode.
Det er ikke obligatorisk å bruke @Override
. Men når vi bruker dette, bør metoden følge alle reglene for overstyring. Ellers vil kompilatoren generere en feil.
Java Overriding Rules
- Både superklassen og underklassen må ha samme metodenavn, samme returtype og samme parameterliste.
- Vi kan ikke overstyre metoden deklarert som
final
ogstatic
. - Vi bør alltid overstyre abstrakte metoder for superklassen (vil bli diskutert i senere opplæringsprogrammer).
super Keyword i Java Overriding
Et vanlig spørsmål som oppstår når du utfører overstyring i Java er:
Kan vi få tilgang til superklassens metode etter overstyring?
Svaret er ja . For å få tilgang til superklassemetoden fra underklassen bruker vi super
nøkkelordet.
Eksempel 2: Bruk av 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(); ) )
Utgang :
Jeg er et dyr. Jeg er en hund.
I eksemplet ovenfor overstyrer underklassen Dog metoden displayInfo()
til superklassen Animal.
Når vi kaller metoden displayInfo()
ved hjelp av d1-objektet til Dog-underklassen, kalles metoden i Dog-underklassen; metoden inne i superklassen kalles ikke.
Inne displayInfo()
i Dog-underklassen har vi pleid super.displayInfo()
å kalle displayInfo()
superklassen.
Det er viktig å merke seg at konstruktører i Java ikke arves. Derfor er det ikke noe som heter konstruktøroverstyring i Java.
Imidlertid kan vi kalle konstruktøren til superklassen fra dens underklasser. For det bruker vi super()
. For å lære mer, besøk Java super søkeord.
Få tilgang til spesifikatorer i metodeoverstyring
Den samme metoden deklarert i superklassen og dens underklasser kan ha forskjellige tilgangsspesifikatorer. Imidlertid er det en begrensning.
Vi kan bare bruke de tilgangsspesifikatorene i underklasser som gir større tilgang enn tilgangsspesifikatoren til superklassen. For eksempel,
Anta at en metode myClass()
i superklassen blir erklært protected
. Deretter kan den samme metoden myClass()
i underklassen være enten public
eller protected
, men ikke private
.
Eksempel 3: Tilgangsspesifikator i overstyring
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(); ) )
Utgang :
Jeg er en hund.
I eksemplet ovenfor overstyrer underklassen Dog metoden displayInfo()
til superklassen Animal.
Når vi ringer displayInfo()
ved hjelp av d1 (objektet til underklassen), kalles metoden i underklassen.
Legg merke til at, displayInfo()
er erklært protected
i Animal superklassen. Den samme metoden har public
tilgangsspesifikatoren i underklassen Dog. Dette er mulig fordi det public
gir større tilgang enn protected
.
Overstyrende abstrakte metoder
I Java er abstrakte klasser opprettet for å være superklassen til andre klasser. Og hvis en klasse inneholder en abstrakt metode, er det obligatorisk å overstyre den.
Vi vil lære mer om abstrakte klasser og overstyring av abstrakte metoder i senere opplæringsprogrammer.