Polimorfismo In Java

INDICE TUTORIAL

Polimorfismo

Da wikipedia:

In informatica, il termine polimorfismo (“avere molte forme”) viene usato in senso generico per riferirsi a espressioni  che possono rappresentare valori di diversi tipi  (dette espressioni polimorfiche). 

Il polimorfismo in Java ha due diversi tipi di comportamenti:

  • polimorfismo dei metodi
  • polimorfismo dei dati

Il polimorfismo dei metodi si riferisce all’overloading e overriding dei metodi, che abbiamo già visto.

Analizziamo ora il polimorfismo dei dati.

Il polimorfismo dei dati permette ad una classe di assumere tutte le forme dei figli.

Esempio

interface Animale{
	
}
public class Mucca implements Animale{

	public static void main(String[] args) {
		
		Animale a = new Mucca();
	}
	
}

Grazie a questa caratteristica, possiamo usare oggetti che espongono una stessa interfaccia, ma hanno implementazioni diverse.

Ricordiamoci infatti, che una interfaccia definisce un contratto generale che le sottoclassi devono soddisfare.  Quindi, possiamo utilizzare, ad esempio in un metodo, una interfaccia che varierà il suo comportamento in base a quale sottoclasse effettivamente verrà utilizzata.

Esempio

public interface Animale {

	public void emettiVerso();

}

public class Cavallo implements Animale {

	@Override
	public void emettiVerso() {
		System.out.println("NITRITO");
		// TODO Auto-generated method stub
		
	}

}

public class Leone implements Animale{

	@Override
	public void emettiVerso() {
		System.out.println("RUGGITO");
		
		
	}

}

public class Mucca implements Animale {

	@Override
	public void emettiVerso() {
		// TODO Auto-generated method stub
		System.out.println("MUGGITO");
	}


	public void emettiVerso(int c) {
		// TODO Auto-generated method stub
		System.out.println("MUGGITO  forter");
	}
}


public class Prova {
	
	public static void faiVerso(Animale l) {
		l.emettiVerso();
	}

	public static void main(String[] args) {

		Leone l1 = new Leone();

		faiVerso(l1);

		Mucca m = new Mucca();
		faiVerso(m);

		Cavallo c = new Cavallo();
		faiVerso(c);

	
		//
		//
		 Animale[] arrayAnimali = new Animale[5];
		 
		 arrayAnimali[0] = new Mucca();
		 arrayAnimali[1] = new Mucca();
		 arrayAnimali[2] = new Cavallo();
		 arrayAnimali[3] = new Mucca();
		 arrayAnimali[4] = new Leone();
		 
		 
		 
		 for(int i = 0; i < arrayAnimali.length; i++)
		 {
			 Animale anim = arrayAnimali[i];
			 
			 
			 
		 }
		
		 for(Animale e: arrayAnimali)
			 e.emettiVerso();          
		 
	
		// chiamata di un metodo che appartiene solo al figlio
		 Animale muc = new Mucca();
		 muc.emettiVerso(1); //errore compilazione, metodo non visi-bile

	}

}

Da notare che tutte le classi discendono dalla classe Object; di conseguenza Object può assumere la forma di qualsiasi  classe.

Esempio

Object o = new Cavallo();

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *