Semestre 02, 2026
Una subclase hereda atributos y métodos de una superclase con extends.
class Persona {
String nombre;
public void saludar() {
System.out.println("Hola, soy " + nombre);
}
}
class Estudiante extends Persona {
String carnet;
}
Toda clase hereda de Object. Ejemplo: Object → Persona → Estudiante.
toString(): representación en textoequals(): comparación de igualdadgetClass(): tipo en ejecuciónSe heredan public y protected; private no se hereda (se accede vía getters/setters).
class Hijo extends Padre {
public void mostrar() {
// secreto; // private: no accesible
System.out.println(protegido); // accesible
System.out.println(publico); // accesible
}
}
Una subclase redefine un método heredado con la misma firma. Se resuelve en tiempo de ejecución.
class Estudiante extends Persona {
@Override
public void saludar() {
System.out.println("Hola, soy estudiante");
}
}
Refiere a la superclase: invoca su constructor o sus métodos sobrescritos.
class Estudiante extends Persona {
@Override
public void saludar() {
super.saludar(); // método de la superclase
System.out.println("... y también estudiante");
}
}
Una referencia de la superclase puede apuntar a un objeto de cualquier subclase.
Persona p1 = new Estudiante();
Persona p2 = new Profesor();
p1.saludar(); // Hola, soy estudiante
p2.saludar(); // Buenos días, soy profesor
Persona p = new Estudiante(); // upcasting implícito
Estudiante e = (Estudiante) p; // downcasting explícito
ClassCastException.
ArrayList<Persona> personas = new ArrayList<>();
personas.add(new Estudiante());
personas.add(new Profesor());
for (Persona p : personas) {
p.saludar(); // cada objeto ejecuta su versión
}
No se instancian; pueden tener métodos abstractos que las subclases deben implementar (un contrato).
abstract class Animal {
public abstract void hacerSonido();
}
class Perro extends Animal {
@Override
public void hacerSonido() {
System.out.println("Guau");
}
}
final class: no puede extenderse.final en método: no puede sobrescribirse.