fragile base class

The fragile base class problem is a fundamental architectural problem of OOP systems where base classes are considered ‘fragile’ because seemingly safe modifications to a base class, when inherited by the derived classes, may cause the derived classes to malfunction. The programmer cannot determine whether a base class change is safe simply by examining the methods of the base class in isolation.
This is a problem in Java, where classes and methods are open by default. To fix the problem, developers should “Design and document for inheritance or else prohibit it.”
Because of this experience in Java, the Kotlin designers decided to make all classes and methods final by default. That way, you can “design for inheritance” by marking classes and functions as open only when you really want them to be open to extension.