Het super- trefwoord wordt in verschillende situaties gebruikt. Voordat we aan de slag gaan met dit bericht, raden we je aan om meer te weten te komen over overerving in Java voor een beter begrip.
Wat is het super-trefwoord in Java?
Super is een sleutelwoord dat kan worden gebruikt om overschreven methoden van de superklasse aan te roepen, maar ook om te verwijzen naar verborgen velden van de superklasse.Waarom en wanneer het superzoekwoord gebruiken?
Het Java- supersleutelwoord heeft drie expliciete toepassingen.- Toegang tot de gegevensleden van de bovenliggende klasse wanneer de onderliggende klasse ook gegevensleden met dezelfde naam heeft.
- Roep de standaard of geparametriseerde constructors van de bovenliggende klasse aan in de onderliggende klasse.
- Roep de methoden van de bovenliggende klasse aan in de onderliggende klasse als het kind overschreven methoden heeft.
Voorbeeld 1 - Toegang tot gegevensleden van ouders
Voorbeeld 1 illustreert hoe toegang kan worden verkregen tot de attributen of gegevensleden van de klasse Voertuig in de onderliggende klasse Auto -type. Zorg ervoor dat u het onderstaande fragment uitvoert om het goed te begrijpen.
class Vehicle {
String name = "vehicle";
}
class Car extends Vehicle {
String name = "car";
public void printMyName() {
System.out.println(name);
}
public void printParentName() {
// use super keyword to access
// parent's data member / attribute
System.out.println(super.name);
}
public static void main(String[] args) {
Car myCar = new Car();
System.out.print("My Car's Name: ");
myCar.printMyName();
// printing the parent's name
// using the super keyword
System.out.print("My Parent Vehicle's Name: ");
myCar.printParentName();
}
}
Uitgang
Naam van mijn auto: auto Naam van mijn oudervoertuig: voertuig
Voorbeeld 2 - Toegang tot de constructors van de ouder in de onderliggende klasse
Door super() expliciet aan te roepen, krijgt u toegang tot zowel de standaard- als de geparametriseerde constructor van de bovenliggende klasse in de onderliggende klasse. Hier is een voorbeeld van de geparametriseerde constructor. De constructor van de bovenliggende dwz de klasse Shape wordt aangeroepen (met behulp van super() ) in de onderliggende dwz de klasse Triangle om de attributen in te stellen. Voer het onderstaande programma uit om de uitvoer zelf te testen.
public class Shape {
String name;
public Shape(String n) {
System.out.println("Shape() parameterized constructor called!");
name = n;
}
}
class Triangle extends Shape {
int sides = 3;
String color;
public Triangle(String n, String c) {
// The super keyword calls the parameterized
// constructor of the parent (Shape) with
// 'n' as a parameter
super(n);
System.out.println("Triangle() parameterized constructor called!");
this.color = c;
}
public static void main(String[] args) {
Triangle myTriangle = new Triangle("Triangle Alpha", "Yellow");
System.out.println(myTriangle.name);
System.out.println(myTriangle.color);
}
}
Uitgang
Shape() geparametriseerde constructor aangeroepen! Triangle() geparametriseerde constructor aangeroepen! Driehoek Alfa Geel
Snelle uitdaging : ontwerp het bovenstaande programma opnieuw door de standaardconstructor te gebruiken om uw leren te testen. Zie ook hoe super() verschilt van super(arg) .
Voorbeeld 3 - Toegang tot de overschreven methode van de ouder in de onderliggende klasse
Voorbeeld 3 laat zien hoe u toegang kunt krijgen tot de methoden van de klasse van de ouder die ook door de onderliggende klasse wordt gedefinieerd. De bovenliggende klasse Sound in het onderstaande programma definieert een methode voice() . De onderliggende klasse Drum heeft ook een methode met dezelfde naam, namelijk voice() . Het betekent dat de methodestem wordt overschreven door de subklasse. Voer het onderstaande programma uit om te leren hoe het sleutelwoord super nodig is om de methoden van de bovenliggende klasse in de onderliggende klasse te gebruiken.
public class Sound {
public void voice() {
System.out.println("Play sound!");
}
}
class Drum extends Sound {
public void voice() {
System.out.println("Play drums!");
}
public void play() {
// The super keyword calls the
// voice() method of the parent
super.voice();
voice();
}
public static void main(String[] args) {
Drum myDrum = new Drum();
myDrum.play();
}
}
Uitgang
Shape() geparametriseerde constructor aangeroepen! Triangle() geparametriseerde constructor aangeroepen! Driehoek Alfa Geel
GO TO FULL VERSION