Java Method Overriding

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 @Overridemerknaden i vårt eksempel. I Java er merknader metadataene vi brukte for å gi informasjon til kompilatoren. Her @Overridespesifiserer 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 finalog static.
  • 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 supernø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 publiceller 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 protectedi Animal superklassen. Den samme metoden har publictilgangsspesifikatoren i underklassen Dog. Dette er mulig fordi det publicgir 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.

Interessante artikler...