Polymorphism in Java means using a base class reference to call methods that behave differently depending on the actual subclass object. In the example, an Animal reference points to a Dog object. When calling sound(), Dog's version runs, not Animal's. This happens because Java decides which method to run at runtime based on the object's real type. This feature helps write flexible and reusable code. You can add new subclasses without changing existing code that uses the base class. However, the base class reference can only call methods declared in the base class, not subclass-specific methods. This example shows why polymorphism is needed: it lets one reference type work with many object types, each behaving correctly.