Abstract classes are incomplete and need concrete subclasses.
Abstract classes contain abstract methods with no implementation, making them incomplete. They serve as templates for subclasses, which provide specific implementations. For instance, you can't create an object of 'AbstractShape' directly because it might have an abstract 'draw' method that 'Circle' or 'Square' subclasses must implement.