Alumnos y profesores, todos personas
En el instituto hay alumnos y hay profesores. Los dos tienen un nombre y los dos saludan.
Pero el alumno tiene un curso, y el profesor tiene una asignatura.
Sería pesado escribir el nombre y el saludo dos veces. Java te deja escribir lo común una vez y repartirlo.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Herencia | Una clase recibe los atributos y métodos de otra, sin escribirlos otra vez. | Student recibe de Person |
| Clase padre | La clase de la que se hereda. Guarda lo que es común. | Person |
| Clase hija | La clase que hereda y añade cosas propias. | Student |
| extends | La palabra que dice de quién hereda una clase. | class Student extends Person |
| super | Llama al constructor de la clase padre. | super(name); |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
extends: soy una persona y algo más
Escribes class Student extends Person. Se lee: un alumno es una persona.
El alumno ya tiene todo lo de Person. Solo escribes lo nuevo: el curso.
Así no repites código. Si cambias algo en Person, cambia para todos sus hijos.
Pruébalo: un alumno que es persona
class Person {
private String name;
Person(String name) { this.name = name; }
String getName() { return name; }
String greet() { return "Hola, soy " + name; }
}
class Student extends Person {
private String course;
Student(String name, String course) {
super(name);
this.course = course;
}
String getCourse() { return course; }
}
public class Main {
public static void main(String[] args) {
Student student = new Student("Marta", "Programación");
System.out.println(student.greet());
System.out.println(student.getName() + " estudia " + student.getCourse());
}
}
super llena la parte del padre
Un alumno tiene dos partes: la de persona y la suya. Las dos hay que rellenarlas.
La línea super(name); llama al constructor del padre. Tiene que ser la primera línea del constructor hijo.
Después rellenas lo propio: this.course = course;.
Ejemplo resuelto: qué tiene un Student
| Qué | Dónde se escribió | Student lo tiene |
|---|---|---|
| name | Person | Sí, heredado |
| greet() | Person | Sí, heredado |
| getName() | Person | Sí, heredado |
| course | Student | Sí, propio |
| getCourse() | Student | Sí, propio |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Repaso rápido
Inténtalo
Repaso rápido
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.
El hijo no ve lo privado del padre
Advertencia
El atributo name es private en Person. Dentro de Student no puedes escribir name. Usa el método getName(). Lo privado lo conoce solo la clase que lo escribió.