Ejemplo polimorfismo

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

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos