Java-methode overschrijven

In deze zelfstudie leren we aan de hand van voorbeelden over het overschrijven van methoden in Java.

In de laatste tutorial leerden we over overerving. Overerving is een OOP-eigenschap waarmee we een nieuwe klasse (subklasse) kunnen afleiden uit een bestaande klasse (superklasse). De subklasse neemt de attributen en methoden van de superklasse over.

Als nu dezelfde methode is gedefinieerd in zowel de superklasse als de subklasse, dan heeft de methode van de subklasseklasse voorrang op de methode van de superklasse. Dit staat bekend als het overschrijven van een methode.

Voorbeeld 1: Methode overschrijven

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

Uitgang :

 Ik ben een hond. 

In het bovenstaande programma is de displayInfo()methode aanwezig in zowel de Animal-superklasse als de Dog-subklasse.

Wanneer we het displayInfo()gebruik van het d1-object (object van de subklasse) aanroepen, wordt de methode binnen de subklasse Dog aangeroepen. De displayInfo()methode van de subklasse overschrijft dezelfde methode van de superklasse.

Let op het gebruik van de @Overrideannotatie in ons voorbeeld. In Java zijn annotaties de metagegevens die we hebben gebruikt om informatie aan de compiler te verstrekken. Hier @Overridespecificeert de annotatie de compiler dat de methode na deze annotatie de methode van de superklasse overschrijft.

Het is niet verplicht om te gebruiken @Override. Wanneer we dit echter gebruiken, moet de methode alle regels van overschrijven volgen. Anders genereert de compiler een fout.

Java-overschrijvende regels

  • Zowel de superklasse als de subklasse moeten dezelfde methodenaam, hetzelfde retourneringstype en dezelfde parameterlijst hebben.
  • We kunnen de methode die is gedeclareerd als finalen niet negeren static.
  • We moeten altijd de abstracte methoden van de superklasse negeren (zal in latere tutorials worden besproken).

super sleutelwoord in Java overschrijven

Een veel voorkomende vraag die opkomt tijdens het uitvoeren van overschrijving in Java is:

Hebben we toegang tot de methode van de superklasse na overschrijving?

Het antwoord is ja . Om toegang te krijgen tot de methode van de superklasse vanuit de subklasse, gebruiken we het supertrefwoord.

Voorbeeld 2: gebruik van superzoekwoord

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

Uitgang :

Ik ben een dier. Ik ben een hond.

In het bovenstaande voorbeeld heeft de subklasse Dog voorrang op de methode displayInfo()van de superklasse Animal.

Wanneer we de methode aanroepen displayInfo()met het object d1 van de subklasse Dog, wordt de methode binnen de subklasse Dog aangeroepen; de methode binnen de superklasse wordt niet aangeroepen.

Binnen displayInfo()de Dog-subklasse hebben we gewend super.displayInfo()om displayInfo()de superklasse te noemen .

Het is belangrijk op te merken dat constructors in Java niet worden overgenomen. Daarom bestaat er niet zoiets als het overschrijven van constructeurs in Java.

We kunnen de constructor van de superklasse echter vanuit zijn subklassen aanroepen. Daarvoor gebruiken we super(). Ga voor meer informatie naar Java-superzoekwoord.

Toegang tot Specifiers in Method Overriding

Dezelfde methode gedeclareerd in de superklasse en zijn subklassen kunnen verschillende toegangsspecificaties hebben. Er is echter een beperking.

We kunnen die toegangsspecificaties alleen gebruiken in subklassen die grotere toegang bieden dan de toegangsspecificatie van de superklasse. Bijvoorbeeld,

Stel dat een methode myClass()in de superklasse wordt gedeclareerd protected. Vervolgens kan dezelfde methode myClass()in de subklasse publicof zijn protected, maar niet private.

Voorbeeld 3: Toegangsspecificatie bij overschrijven

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

Uitgang :

 Ik ben een hond. 

In het bovenstaande voorbeeld heeft de subklasse Dog voorrang op de methode displayInfo()van de superklasse Animal.

Telkens wanneer we het displayInfo()gebruik van de d1 (object van de subklasse) aanroepen, wordt de methode binnen de subklasse aangeroepen.

Merk op dat de displayInfo()wordt gedeclareerd protectedin de Animal superklasse. Dezelfde methode heeft de publictoegangsspecificatie in de subklasse Dog. Dit is mogelijk omdat het publiceen grotere toegang biedt dan het protected.

Abstracte methoden overschrijven

In Java worden abstracte klassen gemaakt om de superklasse van andere klassen te zijn. En als een klasse een abstracte methode bevat, is het verplicht om deze te overschrijven.

We zullen in latere tutorials meer leren over abstracte klassen en het overschrijven van abstracte methoden.

Interessante artikelen...