Encapsulation in Java is the mechanism of wrapping code and data together into a single unit, like a capsule. It hides internal state and requires all interaction to be performed through an object's methods. Polymorphism allows objects of different types to be treated as objects of a common parent type. It facilitates flexibility and reusability by allowing one interface to control a lot of implemented methods.