Java Method Overriding

I den här handledningen lär vi oss om metodöverstyrning i Java med hjälp av exempel.

I den senaste handledningen lärde vi oss om arv. Arv är en OOP-egenskap som låter oss härleda en ny klass (underklass) från en befintlig klass (superklass). Underklassen ärver superklassens attribut och metoder.

Om samma metod nu definieras i både superklassen och underklassen, åsidosätter metoden för underklassklassen metoden för superklassen. Detta är känt som metodöverstyrande.

Exempel 1: Metodöverskridande

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

Utgång :

 Jag är en hund. 

I ovanstående program finns displayInfo()metoden både i djurklassen och underklassen Hund.

När vi ringer displayInfo()med d1-objektet (objekt av underklassen) kallas metoden inuti underklassen Dog. Den displayInfo()metod för underklassen åsidosätter samma metod för superklassen.

Lägg märke till användningen av @Overrideanteckningen i vårt exempel. I Java är annoteringar metadata som vi använde för att ge information till kompilatorn. Här @Overrideanger anteckningen kompilatorn att metoden efter den här anteckningen åsidosätter superklassens metod.

Det är inte obligatoriskt att använda @Override. Men när vi använder detta bör metoden följa alla regler för åsidosättande. I annat fall genererar kompilatorn ett fel.

Java-åsidosättande regler

  • Både superklassen och underklassen måste ha samma metodnamn, samma returtyp och samma parameterlista.
  • Vi kan inte åsidosätta metoden som deklareras som finaloch static.
  • Vi bör alltid åsidosätta superklassens abstrakta metoder (kommer att diskuteras i senare handledning).

super Keyword i Java Overriding

En vanlig fråga som uppstår när du utför åsidosättande i Java är:

Kan vi komma åt superklassens metod efter åsidosättande?

Svaret är ja . För att komma åt metoden för superklassen från underklassen använder vi supernyckelordet.

Exempel 2: Användning 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(); ) ) 

Utgång :

Jag är ett djur. Jag är en hund.

I exemplet ovan åsidosätter underklassen Dog metoden displayInfo()för superklassen Animal.

När vi kallar metoden med displayInfo()hjälp av d1-objektet i Dog-underklassen kallas metoden inuti Dog-underklassen; metoden inuti superklassen kallas inte.

Inuti displayInfo()Dog-underklassen har vi brukat super.displayInfo()kalla displayInfo()superklassen.

Det är viktigt att notera att konstruktörer i Java inte ärvs. Därför finns det inget sådant som konstruktörsöverstyrning i Java.

Vi kan dock kalla superklassens konstruktör från dess underklasser. För det använder vi super(). För att lära dig mer, besök Java super nyckelord.

Åtkomstspecifikatorer i metodöverskridande

Samma metod som deklarerats i superklassen och dess underklasser kan ha olika åtkomstspecifikationer. Det finns dock en begränsning.

Vi kan bara använda de åtkomstspecifikatorer i underklasser som ger större åtkomst än superklassens åtkomstspecifikator. Till exempel,

Antag att en metod myClass()i superklassen förklaras protected. Då kan samma metod myClass()i underklassen vara antingen publiceller protected, men inte private.

Exempel 3: Access Specifier i Overriding

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

Utgång :

 Jag är en hund. 

I exemplet ovan åsidosätter underklassen Dog metoden displayInfo()för superklassen Animal.

Närhelst vi ringer displayInfo()med d1 (objekt av underklassen) kallas metoden inuti underklassen.

Lägg märke till att displayInfo()deklareras protectedi Superklassen för djur. Samma metod har publicåtkomstspecifikatorn i underklassen Hund. Detta är möjligt eftersom det publicger större åtkomst än protected.

Åsidosättande abstrakta metoder

I Java skapas abstrakta klasser för att vara superklassen för andra klasser. Och om en klass innehåller en abstrakt metod är det obligatoriskt att åsidosätta den.

Vi lär oss mer om abstrakta klasser och åsidosättande av abstrakta metoder i senare handledning.

Intressanta artiklar...