Hi Soum,
The question's a bit tricky. What you said was actually my first answer.
At compile-time:
h -> Mammal
c -> Cattle
Runtime:
h -> Horse
c -> Horse
Since
Java knows h to be an instance of Mammal at compile-time, no matter what the class of the object it holds at runtime, the method eat(Mammal) will be called.
Also, note that c, being declared as of class Cattle, cannot call eat(Horse). This is because the methods are overloaded, not overriden.