What exactly and practically Dynamic Binding means..what exactly is Run-time Compliling?...Please tell the Dynamic binding in the below code

Java Code:
class A{
	void Aone(){
		System.out.println("Hey");
	}
}

class B extends A
{
	void Aone(){
		System.out.println("heello");
	}
}

class C extends A
{
	void Aone(){
		System.out.println("hai");
	}
}

class second{
	public static void main(String args[]){
		B b= new B();
		C c=new C();
		A r=new B();
		r=b;
		r.Aone();
		r=c;
		r.Aone();
		
	}
}