super Palabra clave en Java
La palabra clave super
en Java se utiliza para referirse al objeto de clase padre inmediato. Se suele utilizar para acceder a los métodos y constructores de la clase padre, lo que permite a una subclase heredar y reutilizar la funcionalidad de su superclase.
Utilización
La palabra clave super
puede utilizarse en tres contextos principales:
- Para llamar al constructor de la superclase.
- Para acceder a un método de la superclase que ha sido sobrescrito en la subclase.
- Para acceder a un campo de la superclase cuando está oculto por un campo del mismo nombre en la subclase.
Syntax
super();
super.methodName();
super.fieldName;
Ejemplos
Ejemplo 1: Llamada al constructor de la superclase
class Animal {
Animal() {
System.out.println("Animal constructor called");
}
}
class Dog extends Animal {
Dog() {
super(); // Calls the constructor of Animal class
System.out.println("Dog constructor called");
}
}
public class TestSuper {
public static void main(String[] args) {
Dog d = new Dog(); // Output: Animal constructor called
// Dog constructor called
}
}
En este ejemplo, la llamada a super()
en el constructor de Dog
invoca al constructor de la clase Animal
.
Ejemplo 2: Acceso al método de la superclase
class Animal {
void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
void sound() {
super.sound(); // Calls the sound() method of Animal class
System.out.println("Dog barks");
}
}
public class TestSuper {
public static void main(String[] args) {
Dog d = new Dog();
d.sound(); // Output: Animal makes a sound
// Dog barks
}
}
Aquí, la llamada super.sound()
del método sound()
de la clase Dog
invoca al método sound()
de la clase Animal
.
Ejemplo 3: Acceso al campo Superclase
class Animal {
String color = "white";
}
class Dog extends Animal {
String color = "black";
void displayColor() {
System.out.println("Dog color: " +// Prints the color of Dog class
System.out.println("Animal color: " + super.// Prints the color of Animal class
}
}
public class TestSuper {
public static void main(String[] args) {
Dog d = new Dog();
d.displayColor(); // Output: Dog color: black
// Animal color: white
}
}
En este ejemplo, super.color
se utiliza para acceder al campo color
de la clase Animal
, que está oculto por el campo color
de la clase Dog
.
Consejos y buenas prácticas
- Encadenamiento de constructores: Utiliza
super()
en el constructor de una subclase para asegurarte de que se llama al constructor de la superclase, permitiendo la correcta inicialización del objeto.class Parent { Parent() { System.out.println("Parent constructor"); } } class Child extends Parent { Child() { super(); // Always the first statement in the constructor System.out.println("Child constructor"); } }
- Anulación de métodos: Utiliza
super.methodName()
para llamar a un método de la superclase cuando se sobrescribe en la subclase. Esto es útil para ampliar o modificar el comportamiento del método heredado.class Parent { void display() { System.out.println("Parent display"); } } class Child extends Parent { void display() { super.display(); // Calls Parent's display method System.out.println("Child display"); } }
- Acceso al campo: Utiliza
super.fieldName
para acceder a un campo de la superclase cuando esté oculto por un campo del mismo nombre en la subclase. Esto ayuda a evitar ambigüedades y garantiza que se accede al campo correcto.class Parent { int number = 10; } class Child extends Parent { int number = 20; void showNumber() { System.out.println(super.number); // Accesses Parent's number } }
- Legibilidad: Utiliza
super
juiciosamente para que tu código sea más legible y fácil de mantener. El uso excesivo desuper
puede dificultar la comprensión del código. - Colocación en Constructores: Coloca siempre la llamada a
super()
como primera sentencia en el constructor de la subclase para evitar errores de compilación. - Contextos estáticos: Recuerda que
super
no puede utilizarse en métodos estáticos ni en contextos estáticos, ya que se refiere a una instancia de una clase.
Aprende Java Essentials
Desarrolla tus conocimientos de Java desde la base y domina los conceptos de programación.