Is this true about late binding?-Collection of common programming errors

I read in “Thinking in java” in chapter “Polymorphism” about the concept of “Late binding” , i just wanna know if my understanding of this concept is true

Procedural languages know where is the function to execute before run-time for instance

if(condition){func1();}else{func2();}

So the address of each possible function is known exactly and before the program runs , so it is compiled easily , but in OOLs examine this code ,,

makeItSpeak(Animal a ){
  a.speak();
}

While a may be a dog , a cat or any other Animal type , and because we initialize objects at run-time , so we must pass the argument upon which we run speak at run-time , so this is late binding which occurs at run-time ….

IS THAT TRUE ??