An abstract class can contain both abstract and non-abstract methods. Abstract methods are those that do not have an implementation, while non-abstract methods have a complete implementation. However, any class that contains at least one abstract method must be declared as abstract, which means that it cannot be instantiated directly.