Basically, an abstract class is a class that cannot be instantiated. If you like, you can treat it as an interface. An abstract class is normally expected to be subclassed and its methods overriden/implemented by this subclass. It doesn't matter if the abstract class has abstract methods or not. You can have an abstract with all of its methods implemented. However, a class that implements an interface or extends an abstract class, and does not implement all of superclass's methods, must be declared as an abstract class.