Abstraction in Java allows hiding implementation details and exposing only essential properties and behaviors to users. This is achieved through abstract classes and interfaces. Abstract classes can contain both abstract and concrete methods, while interfaces contain only abstract methods. Any subclass of an abstract class must implement all abstract methods to be instantiable, or itself be declared abstract. Abstract classes allow partial implementation to be inherited and completed in subclasses.