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.
  1. Accedere ai membri dati della classe genitore quando anche la classe figlia ha membri dati con lo stesso nome.
  2. Chiamare i costruttori predefiniti o con parametri della classe padre nella classe figlia.
  3. Chiamare i metodi della classe padre nella classe figlia se il figlio ha eseguito l'override dei metodi.
Comprendiamo tutti i tre casi precedenti usando l'aiuto di esempi.

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

Conclusione

Entro la fine di questo post, speriamo che sarai in grado di comprendere il funzionamento della super parola chiave in Java. Ti incoraggiamo a imparare la programmazione con la pratica. Poiché la pratica è la chiave definitiva per imparare a costruire la logica. Questo post ti accoglierà comunque ogni volta che rimarrai bloccato. Fino ad allora, buon apprendimento!