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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Sobrescribir | Escribir en la clase hija un método con el mismo nombre que el del padre, pero con otro contenido. | sound() de Dog |
| @Override | Una nota sobre el método que avisa a Java de que sobrescribes uno del padre. | @Override |
| Polimorfismo | Una misma orden que cada objeto cumple a su manera. | animal.sound() |
| Tipo del padre | Una variable del tipo del padre puede guardar un objeto de cualquier hija. | Animal pet = new Dog(); |
| Array de animales | Una 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
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 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.
Pruébalo: la granja habla
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
| Puesto | Objeto que hay | farm[i].sound() escribe |
|---|---|---|
| 0 | Dog | Guau |
| 1 | Cow | Muuu |
| 2 | Animal | ... |
| 3 | Dog | Guau |
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.