Abstraction in Java allows hiding unnecessary details through interfaces and abstract classes. Abstract classes can contain abstract and non-abstract methods but cannot be instantiated, and derived classes must override abstract methods. For example, a SHAPE abstract class could define a calculateArea() abstract method for subclasses like Rectangle, Circle, and Triangle to implement differently.