La palabra clave super se utiliza en diferentes situaciones. Antes de comenzar con esta publicación, lo alentamos a que aprenda sobre la herencia en Java para una mejor comprensión.
¿Cuál es la palabra clave super en Java?
Super es una palabra clave que se puede utilizar para invocar métodos anulados de la superclase, así como para hacer referencia a campos ocultos de la superclase.¿Por qué y cuándo usar la palabra clave super?
La palabra clave super de Java tiene tres usos explícitos.- Acceda a los miembros de datos de la clase principal cuando la clase secundaria también tenga miembros de datos con el mismo nombre.
- Llame a los constructores predeterminados o parametrizados de la clase principal en la clase secundaria.
- Llame a los métodos de la clase principal en la clase secundaria si la secundaria tiene métodos anulados.
Ejemplo 1: acceder a los miembros de datos de los padres
El ejemplo 1 ilustra cómo se puede acceder a los atributos o miembros de datos de la clase Vehicle en la clase secundaria Car -type. Asegúrese de ejecutar el fragmento a continuación para comprenderlo bien.
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();
}
}
Producción
Nombre de mi coche: coche
Nombre de mi vehículo principal: vehículo
Ejemplo 2: acceda a los constructores de los padres en la clase secundaria
Llamar explícitamente a super() le permite acceder al constructor predeterminado o parametrizado de la clase principal en la clase secundaria. Aquí hay un ejemplo del constructor parametrizado. El constructor de la clase padre, es decir, Forma , se llama (usando super() ) en la clase secundaria, es decir, Triángulo , para establecer los atributos. Ejecute el programa a continuación para probar la salida por sí mismo.
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);
}
}
Producción
¡Constructor parametrizado Shape() llamado!
¡Constructor parametrizado Triangle() llamado!
Triángulo Alfa
Amarillo
Desafío rápido : rediseñe el programa anterior utilizando el constructor predeterminado para probar su aprendizaje. Además, vea cómo super() es diferente de super(arg) .
Ejemplo 3: acceda al método anulado del padre en la clase secundaria
El ejemplo 3 muestra cómo puede acceder a los métodos de la clase principal que también define la clase secundaria. La clase principal Sound en el programa a continuación define un método voice() . La clase secundaria Drum también tiene un método con el mismo nombre, es decir, voice() . Significa que la subclase anula el método voice . Ejecute el programa a continuación para aprender cómo la palabra clave super es necesaria para usar los métodos de la clase principal en la clase secundaria.
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();
}
}
Producción
¡Constructor parametrizado Shape() llamado!
¡Constructor parametrizado Triangle() llamado!
Triángulo Alfa
Amarillo
GO TO FULL VERSION