What is the difference between 'open' and 'public' in Kotlin?

Sagun Raj Lage picture Sagun Raj Lage · Feb 28, 2018 · Viewed 8k times · Source

I am new to Kotlin and I am confused between open and public keywords. Could anyone please tell me the difference between those keywords?

Answer

s1m0nw1 picture s1m0nw1 · Feb 28, 2018

The open keyword means “open for extension“:

The open annotation on a class is the opposite of Java's final: it allows others to inherit from this class. By default, all classes in Kotlin are final, which corresponds to Effective Java, Item 17: Design and document for inheritance or else prohibit it.

You also need to be explicit about methods you want to make overridable, also marked with open:

open class Base {
    open fun v() {}
    fun nv() {}
}

The public keyword acts as a visibility modifier that can be applied on classes, functions etc. Note that public is the default if nothing else is specified explicitly:

If you do not specify any visibility modifier, public is used by default, which means that your declarations will be visible everywhere