An abstract class can have instance methods that implement a default behavior. An Interface can only declare constants and instance methods, but cannot implement default behavior and all methods are implicitly abstract. Moreover, an interface has all public members with no implementation. On the other hand, an abstract class is a class which may have the usual flavors of class members (private, protected, etc.), but has some abstract methods.