package com.trifulcas.clases;
public class Animal {
public void sonido() {
System.out.println("Sonido del animal");
}
}
class Perro extends Animal{
public void sonido() {
System.out.println("Guau");
}
public void aullido() {
System.out.println("Auuuuuu");
}
}
class Gato extends Animal{
public void sonido() {
System.out.println("Miau");
}
public void ronroneo() {
System.out.println("Rrrrrr");
}
}
class Pato extends Animal{
public void sonido() {
System.out.println("CuaCua");
}
}
class Ornitorrinco extends Animal{
}
Prueba:
public static void main(String[] args) {
Animal misifu = new Gato(); // Yo puedo asignar a una variable Animal una de tipo Gato
misifu.sonido();
Animal[] granja= {new Perro(),new Gato(),new Pato(),new Pato()};
// Polimorfismo porque aunque llamo al mismo método (sonido)
// Tiene un comportamiento diferente dependiendo de la clase
for(int i=0;i<granja.length;i++) {
granja[i].sonido();
}
}
Otra prueba:
public static void main(String[] args) {
Animal chucho=new Perro(); // Se puede hacer porque los perros son animales
// Porque la clase Perro deriva de la clase Animal
Animal gatito=new Gato();
Gato misifu=new Gato();
Animal pato= new Pato();
Ornitorrinco or=new Ornitorrinco();
jaleo(chucho);
jaleo(gatito);
jaleo(misifu);
jaleo(pato);
jaleo(or);
}
public static void jaleo(Animal animal) {
// El método sonido hace uso del polimorfismo. Es el mismo para todos
// Pero cada tipo de animal hace algo diferente
// ¿Cómo haría yo para que, si es un ornitorrinco, no haga sonido?
if (!(animal instanceof Ornitorrinco)) {
animal.sonido();
}
// Yo en animal no tengo aullido pero....
// Puedo saber si me están pasando como parámetro un perro
// Y si es así hacer un aullido
if (animal instanceof Perro) {
// Son dos maneras de hacer lo mismo
Perro temp=(Perro) animal; //Conversión implícita que puedo hacer de manera segura porque sé que es un Perro gracias al instanceof
temp.aullido();
((Perro) animal).aullido();
}
if (animal instanceof Gato) {
((Gato) animal).ronroneo();
}
}
Otro ejemplo con las clases que hemos visto en el ejercicio anterior:
Empleado[] empresa=new Empleado[3];
empresa[0]=new Comercial("Eva","111",1000);
empresa[1]=new Comercial("Ana","222",1200);
empresa[2]=new Administrativo("Juan","333",2000,3);
for(Empleado empleado:empresa) {
System.out.println(empleado.getNombre()+" | "+empleado.sueldoNeto());
}