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()); }