Supernøkkelordet brukes i ulike situasjoner . Før du begynner med dette innlegget oppfordrer vi deg til å lære om arv i Java for en bedre forståelse.
Hva er supernøkkelordet i Java?
Super er et nøkkelord som kan brukes til å påkalle overstyrte metoder for superklassen, samt for å referere til skjulte felt i superklassen.Hvorfor og når skal jeg bruke supersøkeordet?
Java- supernøkkelordet har tre eksplisitte bruksområder.- Få tilgang til datamedlemmene til den overordnede klassen når den underordnede klassen også har datamedlemmer med samme navn.
- Kalle standard eller parameteriserte konstruktører for den overordnede klassen i underklassen.
- Kall opp foreldreklassemetodene i barneklassen hvis barnet har overstyrte metoder.
Eksempel 1 - Få tilgang til foreldrenes datamedlemmer
Eksempel 1 illustrerer hvordan attributtene eller datamedlemmene til kjøretøyklassen kan nås i barneklassen Biltype . Pass på at du kjører utdraget nedenfor for å forstå det.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();
}
}
Produksjon
Min bils navn: bil Mitt overordnede kjøretøys navn: kjøretøy
Eksempel 2 - Få tilgang til foreldrenes konstruktører i barneklassen
Eksplisitt oppkalling av super() lar deg få tilgang til både standard eller parameterisert konstruktør for overordnet klasse i underklassen. Her er et eksempel på den parameteriserte konstruktøren. Konstruktøren til den overordnede dvs. Shape -klassen kalles (ved å bruke super() ) i underordnet dvs. Triangle- klassen for å angi attributtene. Kjør programmet nedenfor for å teste utdataene 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);
}
}
Produksjon
Shape() parameterisert konstruktør kalt! Triangle() parameterisert konstruktør kalt! Trekant Alfa Gul
Rask utfordring : Redesign programmet ovenfor ved å bruke standardkonstruktøren for å teste læringen din. Se også hvordan super() er forskjellig fra super(arg) .
Eksempel 3 - Få tilgang til forelderens overstyrte metode i barneklassen
Eksempel 3 viser hvordan du kan få tilgang til metodene for foreldrenes klasse som barneklassen også definerer. Foreldreklassen Sound i programmet nedenfor definerer en metode voice() . Barneklassen Drum har også en metode med samme navn, dvs. voice() . Det betyr at metodestemmen overstyres av underklassen. Kjør programmet nedenfor for å lære hvordan supernøkkelordet er nødvendig for å bruke foreldreklassens metoder i barneklassen.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();
}
}
Produksjon
Shape() parameterisert konstruktør kalt! Triangle() parameterisert konstruktør kalt! Trekant Alfa Gul