Final answer:
In Java, a class is declared abstract to indicate that it's not meant to have instances (b), to force extension by other classes (d), and to allow classes to provide specific method implementations where default implementations are not desirable (c).
Step-by-step explanation:
Declaring a class abstract in Java is useful for several reasons. One important reason is to express that it doesn't make sense to have instances of this class because it might only serve as a base for other classes. Therefore, the correct option related to the usefulness of declaring a class abstract is (b) When it doesn't make sense to have objects of that class. This prevents instantiation but allows other classes to inherit from this abstract class and use its defined capabilities.
The option (d) To force developers to extend the class not to use its capabilities is also correct. Abstract classes in Java are meant to be extended, and they often contain abstract methods that have no implementation and must be implemented in the subclasses. When you use an abstract class, you create a foundation for future classes with a common structure and behavior.
The final option that is correct is (c) When default implementations of some methods are not desirable. Abstract classes can have a mix of fully implemented methods and abstract methods. This characteristic allows the class to provide a common interface and shared code, while still forcing subclasses to provide specific implementations for some methods.