Super søgeordet bruges i forskellige situationer. Før du går i gang med dette indlæg, opfordrer vi dig til at lære om arv i Java for en bedre forståelse.
Hvad er supernøgleordet i Java?
Super er et nøgleord, der kan bruges til at påkalde tilsidesatte metoder i superklassen, samt til at henvise til skjulte felter i superklassen.Hvorfor og hvornår skal man bruge supersøgeordet?
Java super nøgleordet har tre eksplicitte anvendelser.- Få adgang til datamedlemmerne i den overordnede klasse, når den underordnede klasse også har datamedlemmer med samme navn.
- Kald standard- eller parameterkonstruktørerne for den overordnede klasse i den underordnede klasse.
- Kald forældreklassens metoder i underklassen, hvis barnet har tilsidesat metoder.
Eksempel 1 - Få adgang til forældrenes datamedlemmer
Eksempel 1 illustrerer, hvordan attributterne eller datamedlemmerne i køretøjsklassen kan tilgås i underklassen Biltype . Sørg for at køre uddraget nedenfor for at forstå det godt.
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();
}
}
Produktion
Min bils navn: bil Mit moderkøretøjs navn: køretøj
Eksempel 2 - Få adgang til forældrenes konstruktører i børneklassen
Eksplicit at kalde super() giver dig adgang til både standard- eller parameterkonstruktøren for den overordnede klasse i den underordnede klasse. Her er et eksempel på den parametriserede konstruktør. Forælderen dvs. Shape -klassens konstruktør kaldes (ved hjælp af super() ) i den underordnede dvs. Trekant- klassen for at indstille attributterne. Kør programmet nedenfor for at teste outputtet for dig selv.
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);
}
}
Produktion
Shape() parameteriseret konstruktør kaldet! Triangle() parameteriseret konstruktør kaldet! Trekant Alpha Gul
Hurtig udfordring : Redesign ovenstående program ved at bruge standardkonstruktøren til at teste din læring. Se også, hvordan super() er forskellig fra super(arg) .
Eksempel 3 - Få adgang til forælderens tilsidesatte metode i børneklassen
Eksempel 3 viser, hvordan du kan få adgang til metoderne for forældrenes klasse, som børneklassen også definerer. Forælderklassen Sound i programmet nedenfor definerer en metode voice() . Barneklassen Drum har også en metode med samme navn, dvs voice() . Det betyder, at metodestemmen tilsidesættes af underklassen. Kør programmet nedenfor for at lære, hvordan supernøgleordet er nødvendigt for at bruge forældreklassens metoder i underklassen.
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();
}
}
Produktion
Shape() parameteriseret konstruktør kaldet! Triangle() parameteriseret konstruktør kaldet! Trekant Alpha Gul
GO TO FULL VERSION