Café y Código

10. Herencia y Polimorfismo en Java

1. Concepto de Herencia (extends) y la Superclase Vehiculo

La Herencia permite crear clases hijas (subclases) que reutilizan los atributos y métodos de una clase padre (superclase). Usamos la palabra reservada extends.

Vehiculo.java (Superclase Padre)
JAVA
1// 1. Superclase Padre
2public class Vehiculo {
3 protected String marca;
4 protected String modelo;
5 protected int velocidadMax;
6
7 // Constructor de la superclase
8 public Vehiculo(String marca, String modelo, int velocidadMax) {
9 this.marca = marca;
10 this.modelo = modelo;
11 this.velocidadMax = velocidadMax;
12 }
13
14 public void acelerar() {
15 System.out.println(marca + " " + modelo + " está acelerando a " + velocidadMax + " km/h");
16 }
17
18 @Override
19 public String toString() {
20 return "Vehiculo { marca='" + marca + "', modelo='" + modelo + "', vMax=" + velocidadMax + " }";
21 }
22}

2. Subclases: Auto, Moto y Bicicleta con super()

Cada subclase extiende a Vehiculo, añade sus propios atributos específicos y llama al constructor padre mediante super(...):

Subclases Auto, Moto y Bicicleta
JAVA
1// 2. Subclase Auto
2public class Auto extends Vehiculo {
3 private int cantidadPuertas;
4
5 public Auto(String marca, String modelo, int velocidadMax, int cantidadPuertas) {
6 super(marca, modelo, velocidadMax); // Invocación al constructor padre
7 this.cantidadPuertas = cantidadPuertas;
8 }
9
10 @Override
11 public void acelerar() {
12 System.out.println("🚗 Auto " + marca + " " + modelo + " (" + cantidadPuertas + " puertas) ruge el motor!");
13 }
14}
15
16// 3. Subclase Moto
17public class Moto extends Vehiculo {
18 private boolean tieneSidecar;
19
20 public Moto(String marca, String modelo, int velocidadMax, boolean tieneSidecar) {
21 super(marca, modelo, velocidadMax);
22 this.tieneSidecar = tieneSidecar;
23 }
24
25 @Override
26 public void acelerar() {
27 System.out.println("🏍️ Moto " + marca + " " + modelo + " acelera en 2 ruedas! Sidecar: " + tieneSidecar);
28 }
29}
30
31// 4. Subclase Bicicleta
32public class Bicicleta extends Vehiculo {
33 private int numeroMarchas;
34
35 public Bicicleta(String marca, String modelo, int velocidadMax, int numeroMarchas) {
36 super(marca, modelo, velocidadMax);
37 this.numeroMarchas = numeroMarchas;
38 }
39
40 @Override
41 public void acelerar() {
42 System.out.println("🚲 Bicicleta " + marca + " " + modelo + " pedalea a marcha " + numeroMarchas);
43 }
44}

3. Polimorfismo en Acción: Arreglos de Superclase

El Polimorfismo permite tratar a objetos de distintas subclases de manera uniforme a través de la referencia de su clase padre (Vehiculo):

MainGaraje.java (Polimorfismo)
JAVA
1public class MainGaraje {
2 public static void main(String[] args) {
3 // Arreglo de la superclase Vehiculo que contiene distintas subclases
4 Vehiculo[] garaje = new Vehiculo[3];
5 garaje[0] = new Auto("Toyota", "Corolla", 180, 4);
6 garaje[1] = new Moto("Yamaha", "MT-07", 210, false);
7 garaje[2] = new Bicicleta("Trek", "Marlin 7", 45, 12);
8
9 // Recorrido polimórfico: Cada objeto ejecuta su propia versión de acelerar()
10 System.out.println("--- PRUEBA DE POLIMORFISMO EN GARAJE ---");
11 for (Vehiculo v : garaje) {
12 System.out.println(v.toString());
13 v.acelerar(); // Polimorfismo dinámico
14 System.out.println("----------------------------------------");
15 }
16 }
17}

Ponte a prueba

Verifica tu conocimiento sobre herencia con extends, uso de super() y polimorfismo dinámico.

Dato curioso: JDK 1.0 en 1996; James Gosling y Sun Microsystems. Wikipedia

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.