super-classes to avoid changing calls to dynamically-bound methods. Solutions Objective-C has categories as well as non-fragile instance variables. Component Pascal deprecates superclass calls. Java, C++ (Since C++11) and D allow inheritance or overriding a class method to be prohibited by labeling a declaration of a class or method, respectively, with the keyword "final". In the book Effective Java, author Joshua Bloch writes (in item 17) that programmers should "Design and document for inheritance or else prohibit it". C# and VB.NET like Java have "sealed" and "Not Inheritable" class declaration keywords to prohibit inheritance, and require a subclass to use keyword "override" on overriding methods, the same solution later adopted by Scala. Scala require a subclass to use keyword "override" explicitly in order to override a parent class method. In the book "Programming in Scala, 2nd Edition", the author writes that (with modifications here) If there was no method f(), the client’s original implementation of method f() could not have had an override modifier. Once you add the f() method to the second version of your library class, a recompile of the client code would give an compile error instead of wrong behavior. In Kotlin classes and methods are final by default. To enable the class inheritance, the class should be marked with the open modifier. Likewise, a method should be marked as open to allow overriding of the method. Julia allows only subtyping of abstract types and uses composition as an alternative to inheritance. It however has multiple dispatch. See also Fragile binary interface problem Implementation inheritance Inheritance semantics Software brittleness Virtual inheritance References External links Class (computer programming)