Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

this ...vs... super (para usar métodos de la clase padre)

Hola,

En la clase https://app.aluracursos.com/course/java-parte-3-entendiendo-herencia-interfaces/task/73471 en el minuto 1:45 el instructor escribe el siguiente código:

return super.getSalario() + this.getSalario() * 0.05;

Probé dicho código y en este caso en particular parece que super y this no tienen diferencia y ambos hacen referencia al mismo método para obtener el salario, el cual se encuentra declarado en la clase padre Funcionario, pero de ser así se podría usar super o this indistintamente para usar métodos de la clase padre. ¿Cuál sería la diferencia entonces en este caso? (No me refiero a las definiciones de super y this en general)

Imagino que si existiera el método sobreescrito "getSalario()" en la clase hija entonces sí habría una diferencia entre usar super y this para especificar si se refiere al método de la clase padre o hija, pero al no existir ese método en la clase hija y solo en la clase padre usar super o this sería lo mismo. ¿Es así?

2 respuestas

En la siguiente clase https://app.aluracursos.com/course/java-parte-3-entendiendo-herencia-interfaces/task/73472 en el minuto 3:59, luego de cambiar el atributo saldo de private a protected (acción necesaria para poder acceder a ese atributo desde la clase hija), el instructor vuelve a hacer lo mismo y usa this en lugar de super para acceder a un atributo (saldo) de la clase padre, entonces por lo que veo en estos casos se puede usar this o super indistintamente ya que no existe ese mismo atributo en la clase hija y solo en la clase padre. Sin embargo de existir el mismo atributo tanto en la clase padre como en la clase hija entonces entiendo que habrá una diferencia al usar this o super.

Quizás en estos casos, por buenas prácticas, sería mejor ser más específico y usar super para acceder a un atributo o método de la clase padre aunque dicho atributo o método no exista en la clase hija, para así evitar que haya un error en caso el código sea modificado en el futuro por otras personas.

solución!

¡Hola Estudiante!

En el caso que mencionas, en efecto, no hay diferencia en usar "super" o "this" para llamar al método "getSalario()" de la clase padre. La razón por la que se utiliza "super" en este caso es simplemente para dejar claro que se está llamando al método de la clase padre y no de la clase hija (en caso de que existiera una implementación diferente del método en la clase hija).

En resumen, en este caso en particular, usar "super" o "this" es lo mismo, pero es una buena práctica utilizar "super" para dejar claro que se está llamando al método de la clase padre.

¡Espero haber ayudado y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios