Java-superzoekwoord (met voorbeelden)

In deze tutorial leren we aan de hand van voorbeelden over het super-sleutelwoord in Java.

Het supersleutelwoord in Java wordt gebruikt in subklassen om toegang te krijgen tot superklasse-leden (attributen, constructors en methoden).

Voordat we het supersleutelwoord leren kennen, moet u weten wat de overerving van Java is.

Maakt gebruik van super sleutelwoord

  1. Om methoden van de superklasse aan te roepen die in de subklasse worden overschreven.
  2. Om toegang te krijgen tot attributen (velden) van de superklasse als zowel superklasse als subklasse attributen met dezelfde naam hebben.
  3. Om expliciet superklasse no-arg (standaard) of geparametriseerde constructor aan te roepen vanuit de subklasse constructor.

Laten we elk van deze toepassingen begrijpen.

1. Toegang tot overschreven methoden van de superklasse

Als methoden met dezelfde naam zijn gedefinieerd in zowel superklasse als subklasse, overschrijft de methode in de subklasse de methode in de superklasse. Dit wordt het overschrijven van een methode genoemd.

Voorbeeld 1: methode overschrijven

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Uitvoer

 ik ben een hond 

In dit voorbeeld, door een object dog1 van Dog class te maken, kunnen we de methode printMessage () aanroepen die vervolgens de display()instructie uitvoert .

Omdat display()in beide klassen is gedefinieerd, heeft de methode van subklasse Dog voorrang op de methode van superklasse Animal. Daarom wordt de display()van de subklasse genoemd.

Wat als de overschreven methode van de superklasse moet worden aangeroepen?

We gebruiken super.display()als de overschreven methode display()van superklasse Animal moet worden aangeroepen.

Voorbeeld 2: super om superklasse-methode aan te roepen

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( // this calls overriding method display(); // this calls overridden method super.display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Uitvoer

 Ik ben een hond Ik ben een dier 

Hier, hoe het bovenstaande programma werkt.

2. Toegang tot attributen van de superklasse

De superklasse en subklasse kunnen attributen hebben met dezelfde naam. We gebruiken het supersleutelwoord om toegang te krijgen tot het attribuut van de superklasse.

Voorbeeld 3: Toegang tot superklasse-attribuut

 class Animal ( protected String; ) class Dog extends Animal ( public String; public void printType() ( System.out.println("I am a " + type); System.out.println("I am an " + super.type); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printType(); ) ) 

Uitgang :

 Ik ben een zoogdier Ik ben een dier 

In dit voorbeeld hebben we hetzelfde instantieveldtype gedefinieerd in zowel de superklasse Animal als de subklasse Dog.

Vervolgens hebben we een object dog1 van de klasse Dog gemaakt. Vervolgens wordt de printType()methode aangeroepen met dit object.

Binnen de printType()functie,

  • type verwijst naar het attribuut van de subklasse Dog.
  • super.type verwijst naar het attribuut van de superklasse Animal.

Vandaar dat System.out.println("I am a " + type);prenten ik een zoogdier ben. En, System.out.println("I am an " + super.type);prints Ik ben een dier.

3. Gebruik van super () om toegang te krijgen tot de constructor superklasse

Zoals we weten, wordt automatisch de standaardconstructor aangeroepen wanneer een object van een klasse wordt gemaakt.

Om de constructor van de superklasse expliciet aan te roepen vanuit de constructor van de subklasse, gebruiken we super(). Het is een speciale vorm van het supertrefwoord.

super() kan alleen worden gebruikt binnen de constructor van de subklasse en moet de eerste instructie zijn.

Voorbeeld 4: gebruik van super ()

 class Animal ( // default or no-arg constructor of class Animal Animal() ( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // default or no-arg constructor of class Dog Dog() ( // calling default constructor of the superclass super(); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Uitvoer

 Ik ben een dier ik ben een hond 

Hier, wanneer een object dog1 van de klasse Dog wordt gemaakt, roept het automatisch de constructor default of no-arg van die klasse aan.

Binnen de subklasse-constructor super()roept de instructie de constructor van de superklasse aan en voert de instructies erin uit. Daarom krijgen we de output dat ik een dier ben.

De stroom van het programma keert vervolgens terug naar de constructor van de subklasse en voert de resterende instructies uit. Zo ben ik een hond zal worden gedrukt.

Het gebruik super()is echter niet verplicht. Zelfs als het super()niet wordt gebruikt in de subklasse-constructor, roept de compiler impliciet de standaardconstructor van de superklasse aan.

Dus waarom zou je overtollige code gebruiken als de compiler automatisch super () aanroept?

Het is vereist als de constructor met parameters (een constructor die argumenten accepteert ) van de superklasse moet worden aangeroepen vanuit de constructor van de subklasse.

De geparameteriseerde super()moet altijd de eerste instructie in de hoofdtekst van de constructor van de subklasse zijn, anders krijgen we een compilatiefout.

Voorbeeld 5: Geparameteriseerde constructor aanroepen met super ()

 class Animal ( // default or no-arg constructor Animal() ( System.out.println("I am an animal"); ) // parameterized constructor Animal(String type) ( System.out.println("Type: "+type); ) ) class Dog extends Animal ( // default constructor Dog() ( // calling parameterized constructor of the superclass super("Animal"); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Uitvoer

 Type: Dier Ik ben een hond 

De compiler kan automatisch de constructor no-arg aanroepen. Het kan echter geen geparametriseerde constructors aanroepen.

Als een constructor met parameters moet worden aangeroepen, moeten we deze expliciet definiëren in de constructor van de subklasse.

Merk op dat we in het bovenstaande voorbeeld de constructor met parameters expliciet hebben aangeroepen super("Animal"). De compiler roept in dit geval niet de standaardconstructor van de superklasse aan.

Interessante artikelen...