Binding dinamico in Java

/*
 * 
 * In questo caso si hanno due classi, A e B: la seconda ridefinisce sia la proprietà che il
    metodo, in modo da identificare su quale tipo sono invocati
 * 
 * */
class A
	{
		
		public String a="Valgo A";
		
		public A()
		{
			
		}
		
		public void get()
		{
			System.out.println("Eseguo A");
		}
		
	}
	class B extends A
	{
        public String b="Valgo B";
		
		public B()
		{
		
		}
		
		public void get()
		{
			System.out.println("Eseguo B");
		}
		
		
	}
	



public class Esempio {

	
	
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		A a =new A();
		a.get();//esce A
		
		B b= new B();
		b.get();//esce B
		
		a=b;//copio b in a
		
		a.get();//esce B perchè  il metodo 
		//effettivamente eseguito dipende non dal tipo del reference 
		//ma dal contenuto effettivo. 
		//Questo meccanismo prende anche il nome di binding dinamico.
		
		
        System.out.println(a.a);//è rimasta  A perchè   nel caso delle variabili 
        //di classe la variabile utilizzata è quella del tipo del reference, 
        //non del contenuto.
	}

}