Easier to read with cream paper, a tint, more contrast or larger text? Choose your colours and text, once, for every page.

Vista previa

Un método, muchas formas

Esta es la primera página de la lección. Léela y prueba las actividades. El resto está en el curso completo.

35 minutos

Todos hacen su ruido

En una granja gritas: "¡A ver, todos a hablar!". El perro dice guau. El gato dice miau. La vaca dice muuu.

La orden es la misma para todos. Pero cada animal responde a su manera.

En Java pasa igual, y hoy lo vas a programar.

Palabras clave

PalabraQué significaEjemplo
SobrescribirEscribir en la clase hija un método con el mismo nombre que el del padre, pero con otro contenido.sound() de Dog
@OverrideUna nota sobre el método que avisa a Java de que sobrescribes uno del padre.@Override
PolimorfismoUna misma orden que cada objeto cumple a su manera.animal.sound()
Tipo del padreUna variable del tipo del padre puede guardar un objeto de cualquier hija.Animal pet = new Dog();
Array de animalesUna lista que mezcla perros, gatos y vacas, todos vistos como Animal.Animal[]

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

La hija cambia lo que hace el método

La clase Animal tiene un método sound() que dice .... Es el sonido de un animal cualquiera.

Un perro no suena así. En Dog escribes otra vez sound() con el mismo nombre y dices Guau.

Eso es sobrescribir. Antes del método pones @Override.

Pruébalo: un perro y un gato

Código: java
class Animal {
    String sound() { return "..."; }
}

class Dog extends Animal {
    @Override
    String sound() { return "Guau"; }
}

class Cat extends Animal {
    @Override
    String sound() { return "Miau"; }
}

public class Main {
    public static void main(String[] args) {
        Animal generic = new Animal();
        Dog dog = new Dog();
        Cat cat = new Cat();
        System.out.println(generic.sound());
        System.out.println(dog.sound());
        System.out.println(cat.sound());
    }
}

Una variable del padre guarda cualquier hija

Un perro es un animal. Por eso puedes escribir Animal pet = new Dog();.

La variable es de tipo Animal, pero el objeto es un perro. Cuando llamas a pet.sound(), Java mira qué objeto hay dentro.

Contesta Guau, no ....

Repaso rápido

Inténtalo

Repaso rápido

3 preguntas
Pruébalo: tus respuestas se corrigen aquí y después se olvidan. Inicia sesión si quieres que se guarde tu puntuación y continuar donde lo dejaste.Iniciar sesión para guardar tu puntuación

Tus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.

Pruébalo: la granja habla

Código: java
class Animal {
    String sound() { return "..."; }
}

class Dog extends Animal {
    @Override
    String sound() { return "Guau"; }
}

class Cow extends Animal {
    @Override
    String sound() { return "Muuu"; }
}

public class Main {
    public static void main(String[] args) {
        Animal[] farm = {new Dog(), new Cow(), new Animal(), new Dog()};

        // Un solo bucle. Java elige el sonido de cada objeto.
        for (int i = 0; i < farm.length; i++) {
            System.out.println(farm[i].sound());
        }
    }
}

Ejemplo resuelto: qué contesta cada puesto

PuestoObjeto que hayfarm[i].sound() escribe
0DogGuau
1CowMuuu
2Animal...
3DogGuau

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Esto se llama polimorfismo

Mira el bucle. No pregunta si cada animal es perro o vaca. Solo dice sound().

Esta idea se llama polimorfismo: una misma orden y muchas formas de cumplirla.

Si mañana añades un Pig, el bucle sigue funcionando sin tocarlo.

La lección continúa

6 partes más de esta lección están en el curso completo, con los ejercicios y la comprobación final. Una cuenta te da todo.