Hola Jonathan, espero que estés bien
Tu pregunta es muy interesante y toca un punto importante en la programación orientada a objetos. En el caso de las clases abstractas y la herencia, es común definir constructores en la clase padre (en este caso, una clase abstracta si fuera el caso) para inicializar los atributos comunes a todas las subclases. Luego, las subclases deben llamar al constructor de la clase padre para asegurarse de que estos atributos se inicialicen correctamente.
En el ejercicio que mencionas, el error en el código de tu primo Arthur es que el constructor de la clase Alumno
no está llamando al constructor de la clase Persona
. Esto es crucial porque Persona
tiene atributos que deben ser inicializados, como nombre
y edad
.
Para corregir esto, debes usar la palabra clave super
en el constructor de Alumno
para llamar al constructor de Persona
. Aquí tienes un ejemplo de cómo debería verse el constructor de Alumno
:
public class Alumno extends Persona {
private int matricula;
private String curso;
public Alumno(String nombre, int edad, int matricula, String curso) {
super(nombre, edad); // Llamada al constructor de la clase padre
this.matricula = matricula;
this.curso = curso;
}
// Métodos getters...
}
Al hacer esto, te aseguras de que los atributos nombre
y edad
se inicialicen correctamente al crear un objeto de la clase Alumno
. Esto también contribuye a un código más limpio y eficiente, ya que evita la repetición de código y asegura que la lógica de inicialización se mantenga en un solo lugar.
Espero haber ayudado y buenos estudios!