La parola chiave super viene utilizzata in diverse situazioni. Prima di iniziare con questo post, ti invitiamo a conoscere l'ereditarietà in Java per una migliore comprensione.
Qual è la super parola chiave in Java?
Super è una parola chiave che può essere utilizzata per richiamare metodi sovrascritti della superclasse, nonché per fare riferimento a campi nascosti della superclasse.Perché e quando utilizzare la parola chiave super?
La super parola chiave Java ha tre usi espliciti.- Accedere ai membri dati della classe genitore quando anche la classe figlia ha membri dati con lo stesso nome.
- Chiamare i costruttori predefiniti o con parametri della classe padre nella classe figlia.
- Chiamare i metodi della classe padre nella classe figlia se il figlio ha eseguito l'override dei metodi.
Esempio 1 - Accesso ai membri dati del genitore
L'esempio 1 illustra come è possibile accedere agli attributi o ai membri dati della classe Vehicle nella classe figlia Car -type. Assicurati di eseguire lo snippet qui sotto per capire bene.
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();
}
}
Produzione
Nome della mia auto: car Nome del mio genitore del veicolo: vehicle
Esempio 2: accedere ai costruttori del genitore nella classe figlia
La chiamata esplicita di super() consente di accedere sia al costruttore predefinito che a quello parametrizzato della classe genitore nella classe figlia. Ecco un esempio del costruttore parametrizzato. Il costruttore della classe genitore, cioè Shape , viene chiamato (usando super() ) nella classe figlio, cioè Triangle , per impostare gli attributi. Esegui il programma qui sotto per testare tu stesso l'output.
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);
}
}
Produzione
Shape() costruttore parametrizzato chiamato! Costruttore parametrizzato Triangle() chiamato! Triangolo Alfa Giallo
Sfida rapida : ridisegna il programma precedente utilizzando il costruttore predefinito per testare il tuo apprendimento. Inoltre, vedi come super() è diverso da super(arg) .
Esempio 3: accedi al metodo sovrascritto del genitore nella classe figlia
L'esempio 3 mostra come è possibile accedere ai metodi della classe genitore che definisce anche la classe figlia. La classe genitore Sound nel programma seguente definisce un metodo voice() . La classe figlia Drum ha anche un metodo con lo stesso nome, cioè voice() . Significa che la voce del metodo è sovrascritta dalla sottoclasse. Esegui il programma qui sotto per sapere come la parola chiave super è necessaria per usare i metodi della classe genitore nella classe figlia.
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();
}
}
Produzione
Shape() costruttore parametrizzato chiamato! Costruttore parametrizzato Triangle() chiamato! Triangolo Alfa Giallo
GO TO FULL VERSION