1) In which case we need : An abstract class with no abstract methods....
Case 1: I have seen many projects using the base class declared as Abstract. Example : Base class for DVOs, Action classes, DAOs etc. These class can contain some basic methods and properties which can be used or overridden by the subclasses. Here, the main purpose of the class is to create a structure (inheritance) not creating objects.
Case 2: Some adapter classes for AWT listeners are abstract with no abstract methods. For example java.awt.event.WindowAdapter . It represents the scenario when we dont want to implement all the methods of an interface. The subclass can override the methods for a particular functionality.
Case 3: In some cases, we need a class that should not be instantiated and the sub class should use or override some of the methods.
Example : javax.servlet.http.HttpServlet
___________________________________________________________
2) In which case we need : A class with all methods defined as abstract (or should we go for Interface always in this case)
Lets create the problem now :)