Inheritance — Basics
Basic features of inheritance in Kotlin — closed by default, implicit inheritance of Any, with a quick note about the execution order of initializers
— — — — — — — — — — — — — — —
THE CURRENT VERSION OF THIS ARTICLE IS PUBLISHED HERE.
— — — — — — — — — — — — — — —

Tags: #FYI
This article is part of the Kotlin Primer, an opinionated guide to the Kotlin language, which is indented to help facilitate Kotlin adoption inside Java-centric organizations. It was originally written as an organizational learning resource for Etnetera a.s. and I would like to express my sincere gratitude for their support.
It is recommended to read the Introduction before moving on. Check out the Table of Contents for all articles.
Probably one of the most controversial design decision in the Kotlin language is the fact that classes (and class members) are closed by default. This means that to be able to extend a class (or override a class member), it must explicitly be marked using the open keyword. Classes (or class members) which are not marked in this way cannot be extended.
There are many rage discussions on why this is so, and if it was a good idea or not. I leave it up to the reader to read up on arguments from both sides and then pick one. For me, it is a reflections of two fundamental principles that guide the design of Kotlin: Immutability and Explicitness.
Other than that, basic inheritance is fairly similar to Java — every class inherits from exactly one class and zero or more interfaces. Multiple inheritance between classes is not allowed.






