Defecto con los métodos constructores heredados
Publicado por Levir (1 intervención) el 15/03/2021 02:24:09
Hola, tenia un pequeño problema con respecto al tema de la Herencia y los Constructores.
Para resumir presentare una versión simplificada de mi problema y no los aburriré con el código que estaba manejando en ese momento.
Básicamente tenia dos Clases, una de ellas Heredaba de la Otra.
Y la Clase Hija sobrescribía uno de los métodos de la Clase Padre.
El problema es que los constructores de la Clase Hija por razones que yo desconozco al llamar a los constructores de la Clase Padre estos utilizaban el método sobrescrito en lugar del propio de este.
Para ponerlos en contexto básicamente algo como esto:
Y tomando de ejemplo este simple código, el problema surge al crear un objeto Estudiante con el constructor que pide como parámetro un String, ya que en lugar de simplemente imprimirse en pantalla: ¡Nombre cambiado exitosamente por la Clase Persona!
Se imprime: ¡Nombre cambiado exitosamente por la Clase Persona!
¡Nombre cambiado exitosamente por la Clase Estudiante!
Mostrando que esta usando el método sobrescrito.
Entonces quisiera saber como evitar esto, ya que en el código que estaba manejando causaba estragos mucho más grandes.
Básicamente la única solución que conozco es simplemente cambiar el nombre del método y así no sobrescribirlo y que no ocurra ninguna confusión en el constructor.
Pero quisiera saber si existe otra solución mejor que mantenga la sobreescritura o al menos comprender si esto fue creado intencionalmente así.
Para resumir presentare una versión simplificada de mi problema y no los aburriré con el código que estaba manejando en ese momento.
Básicamente tenia dos Clases, una de ellas Heredaba de la Otra.
Y la Clase Hija sobrescribía uno de los métodos de la Clase Padre.
El problema es que los constructores de la Clase Hija por razones que yo desconozco al llamar a los constructores de la Clase Padre estos utilizaban el método sobrescrito en lugar del propio de este.
Para ponerlos en contexto básicamente algo como esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Persona
{
private String nombre;
public Persona()
{
nombre = "desconocido";
}
public Persona(String nombre)
{
setNombre(nombre);
}
public void setNombre(String nombre)
{
this.nombre = nombre;
System.out.println("¡Nombre cambiado exitosamente por la Clase Persona!");
}
}
public class Estudiante extends Persona
{
public Estudiante()
{
super();
}
public Estudiante(String nombre)
{
super(nombre);
}
public void setNombre(String nombre)
{
super.setNombre(nombre); // Llama al metodo setNombre() de la Clase Padre
System.out.println("¡Nombre cambiado exitosamente por la Clase Estudiante!");
}
}
Y tomando de ejemplo este simple código, el problema surge al crear un objeto Estudiante con el constructor que pide como parámetro un String, ya que en lugar de simplemente imprimirse en pantalla: ¡Nombre cambiado exitosamente por la Clase Persona!
Se imprime: ¡Nombre cambiado exitosamente por la Clase Persona!
¡Nombre cambiado exitosamente por la Clase Estudiante!
Mostrando que esta usando el método sobrescrito.
Entonces quisiera saber como evitar esto, ya que en el código que estaba manejando causaba estragos mucho más grandes.
Básicamente la única solución que conozco es simplemente cambiar el nombre del método y así no sobrescribirlo y que no ocurra ninguna confusión en el constructor.
Pero quisiera saber si existe otra solución mejor que mantenga la sobreescritura o al menos comprender si esto fue creado intencionalmente así.
Valora esta pregunta


0