En este tutorial, aprenderemos sobre la súper palabra clave en Java con la ayuda de ejemplos.
La
super
palabra clave en Java se usa en subclases para acceder a los miembros de la superclase (atributos, constructores y métodos).
Antes de conocer la
super
palabra clave, asegúrese de conocer la herencia de Java .Usos de la palabra clave super
- Para llamar a los métodos de la superclase que se reemplaza en la subclase.
- Para acceder a los atributos (campos) de la superclase si tanto la superclase como la subclase tienen atributos con el mismo nombre.
- Para llamar explícitamente a la superclase no-arg (por defecto) o al constructor parametrizado desde el constructor de la subclase.
Comprendamos cada uno de estos usos.
1. Acceso a métodos anulados de la superclase
Si los métodos con el mismo nombre se definen tanto en la superclase como en la subclase, el método de la subclase anula el método de la superclase. Esto se llama anulación de método .
Ejemplo 1: anulación del método
class Animal {
// overridden method
public void display(){
System.out.println("I am an animal");
}
}
class Dog extends Animal {
// overriding method
@Override
public void display(){
System.out.println("I am a dog");
}
public void printMessage(){
display();
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.printMessage();
}
}
Salida
soy un perro
En este ejemplo, al hacer un objeto dog1 de la clase Dog , podemos llamar a su método printMessage () que luego ejecuta la
display()
instrucción.
Como
display()
se define en ambas clases, el método de la subclase Dog anula el método de la superclase Animal . Por lo tanto, display()
de la subclase se llama.
¿Qué pasa si se debe llamar al método anulado de la superclase?
Usamos
super.display()
si el método anulado display()
de la superclase Animal necesita ser llamado.Ejemplo 2: Método Super a Call Superclass
class Animal {
// overridden method
public void display(){
System.out.println("I am an animal");
}
}
class Dog extends Animal {
// overriding method
@Override
public void display(){
System.out.println("I am a dog");
}
public void printMessage(){
// this calls overriding method
display();
// this calls overridden method
super.display();
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.printMessage();
}
}
Salida
soy un perro Soy un animal
Aquí, cómo funciona el programa anterior.

2. Atributos de acceso de la superclase
La superclase y la subclase pueden tener atributos con el mismo nombre. Usamos la
super
palabra clave para acceder al atributo de la superclase.Ejemplo 3: atributo de superclase de acceso
class Animal {
protected String type="animal";
}
class Dog extends Animal {
public String type="mammal";
public void printType() {
System.out.println("I am a " + type);
System.out.println("I am an " + super.type);
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.printType();
}
}
Cuando ejecutamos este programa, la salida será:
Soy un mamifero Soy un animal
En este ejemplo, hemos definido el mismo tipo de campo de instancia tanto en la superclase Animal como en la subclase Perro .
Luego creamos un objeto dog1 de la clase Dog . Entonces, el
printType()
método se llama usando este objeto.
Dentro de la
printType()
función,- tipo se refiere al atributo de la subclase Perro .
- super.type se refiere al atributo de la superclase Animal.
Por lo tanto,
System.out.println("I am a " + type);
impresionesSoy un mamifero. Y, System.out.println("I am an " + super.type);
impresionesSoy un animal.3. Uso de super () para acceder al constructor de superclase
Como sabemos, cuando se crea un objeto de una clase, su constructor predeterminado se llama automáticamente.
Para llamar explícitamente al constructor de la superclase desde el constructor de la subclase, utilizamos
super()
. Es una forma especial de la super
palabra clave.super()
solo se puede usar dentro del constructor de subclase y debe ser la primera instrucción.Ejemplo 4: uso de super ()
class Animal {
// default or no-arg constructor of class Animal
Animal() {
System.out.println("I am an animal");
}
}
class Dog extends Animal {
// default or no-arg constructor of class Dog
Dog() {
// calling default constructor of the superclass
super();
System.out.println("I am a dog");
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
}
}
Salida
Soy un animal soy un perro
Aquí, cuando se crea un objeto dog1 de la clase Dog , llama automáticamente al constructor predeterminado o sin argumentos de esa clase.
Dentro del constructor de la subclase, la
super()
declaración llama al constructor de la superclase y ejecuta las declaraciones dentro de ella. Por lo tanto, obtenemos la salidaSoy un animal.
El flujo del programa luego regresa al constructor de la subclase y ejecuta las declaraciones restantes. Así,soy un perro será impreso
Sin embargo, el uso
super()
no es obligatorio. Incluso si super()
no se usa en el constructor de la subclase, el compilador llama implícitamente al constructor predeterminado de la superclase.
Entonces, ¿por qué usar código redundante si el compilador invoca automáticamente super ()?
Se requiere si el constructor parametrizado (un constructor que toma argumentos) de la superclase debe llamarse desde el constructor de la subclase.
El parametrizado
super()
siempre debe ser la primera instrucción en el cuerpo del constructor de la subclase, de lo contrario, obtenemos un error de compilación.Ejemplo 5: Llame al Constructor parametrizado usando super ()
class Animal {
// default or no-arg constructor
Animal() {
System.out.println("I am an animal");
}
// parameterized constructor
Animal(String type) {
System.out.println("Type: "+type);
}
}
class Dog extends Animal {
// default constructor
Dog() {
// calling parameterized constructor of the superclass
super("Animal");
System.out.println("I am a dog");
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
}
}
Salida
Tipo: animal soy un perro
El compilador puede llamar automáticamente al constructor sin argumentos. Sin embargo, no puede llamar a constructores parametrizados.
Si se debe llamar a un constructor parametrizado, debemos definirlo explícitamente en el constructor de la subclase.

Tenga en cuenta que en el ejemplo anterior, llamamos explícitamente al constructor parametrizado
super("Animal")
. El compilador no llama al constructor predeterminado de la superclase en este caso.
0 Comentarios
Dejanos tu comentario para seguir mejorando!