“This” y “Super”: la diferencia más fácil de entender en programación orientada a objetos
A la hora de comenzar a programar con objetos y clases , hay dos palabras clave que suelen dar muchos quebraderos de cabeza: this y super. Ambas tienen un aspecto que se puede confundir , pero apuntan en cada caso a cosas muy diferentes . Comprenderlas sirve , desde luego , para conseguir que el código sea más ordenado y profesional.
Idea básica
Piensa en la programación orientada a objetos como en una familia:
-
Tú eres una persona con tus propias características (nombre, edad, gustos).
-
Pero también heredas cosas de tus padres (tu apellido, algunas costumbres, incluso habilidades).
En este escenario:
-
thises como decir: “yo mismo”.se refiere a lo que tienes tú como persona. -
superes como decir: “mi papá o mi mamá” se refiere a lo que heredaste de tu familia.
¿Qué hace this?
this es la forma en que un objeto habla de sí mismo. Sirve para:
-
-
Evitar confusiones con nombres repetidos
A veces una variable se llama igual que un atributo.thisaclara cuál es cuál.class Persona { String nombre; Persona(String nombre) { this.nombre = nombre; // "this" aclara que hablamos del atributo } } -
Usar tus propios métodos o atributos
Es como decir: “quiero que el que actúe sea yo, no otro”. -
Pasarte a ti mismo como argumento
Por ejemplo, cuando una función necesita trabajar con la instancia completa y no con una parte.
-
En otras palabras, this es el yo de la clase.
¿Qué hace super?
super aparece cuando hay herencia. Una clase puede “heredar” características de otra, y con super le decimos al programa: “usa lo que ya definió mi papá”.
-
Acceder a lo heredado
Si tu padre (la clase padre) ya tiene un método, no hace falta volver a escribirlo. Consuperpuedes usarlo directamente. -
Llamar al constructor de la superclase
Es como decir: “antes de que yo exista, primero que se construya lo que heredé”. -
Combinar comportamientos
Si un hijo quiere hacer algo parecido a su padre, pero con un toque personal, puede llamar al método del padre y después añadir lo suyo.class Animal { void sonido() { System.out.println("Hace un sonido genérico"); } } class Perro extends Animal { @Override void sonido() { super.sonido(); // Llama al comportamiento del padre System.out.println("Guau guau"); // Añade su propia lógica } }
Diferencia clave
-
this-> apunta a lo que soy yo (mi identidad, mis atributos, mis métodos). -
super-> apunta a lo que heredé de arriba (mi padre o madre en la jerarquía).
O dicho de manera aún más sencilla:
-
this= “mírame a mí mismo”. -
super= “mira lo que mi padre ya tenía”.
Ejemplo práctico: this y super trabajando juntos
Imagina que estamos programando un sistema sencillo para registrar animales.
class Animal {
String nombre;
// Constructor de la clase padre
Animal(String nombre) {
this.nombre = nombre; // "this" distingue el atributo del parámetro
}
void sonido() {
System.out.println("Hace un sonido genérico");
}
}
// Clase hija que hereda de Animal
class Perro extends Animal {
// Constructor de la clase hija
Perro(String nombre) {
super(nombre); // Llama al constructor del padre con "super"
}
@Override
void sonido() {
super.sonido(); // Llama primero al método de la clase padre
System.out.println("Guau guau"); // Añade su propio comportamiento
}
void presentarse() {
System.out.println("Hola, soy " + this.nombre); // Usa "this" para referirse al atributo propio
}
}
¿Qué sucede aquí?
-
En la clase
Animal:-
Usamos
this.nombre = nombre;para aclarar que estamos guardando el valor en el atributo de la clase, y no en el parámetro local.
-
-
En la clase
Perro:-
En el constructor, usamos
super(nombre);para decir: antes de crear al perro, inicializa lo que el padre (Animal) ya tenía definido. -
En el método
sonido(),super.sonido();llama primero al comportamiento genérico, y después agregamos el ladrido del perro. -
En el método
presentarse(),this.nombreapunta al atributo de la instancia actual.
-
Aclaración de uso:
-
thisse usa para hablar de uno mismo (la clase actual). -
superse usa para apoyarse en lo que ya hizo el padre.
| Aspecto | this |
super |
|---|---|---|
| Qué significa | Se refiere al objeto actual, es decir, la clase en la que se está trabajando. | Se refiere a la clase padre, de la cual hereda la clase actual. |
| Contexto | Se utiliza dentro de la misma clase. | Se utiliza en clases que implementan herencia. |
| Acceso | Permite acceder a atributos y métodos propios de la clase. | Permite acceder a atributos y métodos definidos en la superclase. |
| Constructores | Puede llamar a otro constructor de la misma clase. | Puede llamar al constructor de la clase padre. |
| Ejemplo típico | this.nombre = nombre; |
super.sonido(); |
| Metáfora | Representa el “yo mismo”. | Representa lo que viene de “mis padres”. |
| Utilidad principal | Identificar y trabajar con la instancia actual. | Reutilizar o complementar lo que ya estaba definido en la superclase. |
“Entender la diferencia entre this y super no solo mejora tu código, también te ayuda a pensar como un verdadero arquitecto de software: claro, organizado y con visión a futuro.”
¿Cuál es su reacción?

