An abstract class is a class that cannot be instantiated and provides a common interface for its subclasses, while an interface is a blueprint for classes and defines a set of methods that a class must implement. An abstract class can contain both abstract and concrete methods, while an interface can only contain abstract methods.